C语言用指针方法实现题目。有10个人围成一圈,求出相邻三个数之和的最小值

 我来答
wuzongxian0010
推荐于2018-04-14 · TA获得超过796个赞
知道小有建树答主
回答量:433
采纳率:100%
帮助的人:330万
展开全部
#include <stdio.h>

void main()
{
int i, a[10], *p, min;

printf("请输入十个整数: ");
for(i=0, p = a; i < 10; i ++)
scanf("%d", p++);
p = a;
min = *p + *(p+1) + *(p+2);
do {
++p;
if(min > *p + *(a+(p-a+1)%10) + *(a+(p-a+2)%10))
min = *p + *(a+(p-a+1)%10) + *(a+(p-a+2)%10);
} while (p < a+10);
printf("相邻的三个数之和的最小值是%d\n", min);
}
luvnn
2014-04-24 · TA获得超过160个赞
知道小有建树答主
回答量:159
采纳率:100%
帮助的人:103万
展开全部
可以用循环链表来实现
Linklist L;
p=L;
q=p->next;
r=q->next;
int min;
min=p.data+q.data+r->data;

while(p->next!=L)
{
p=q;
q=q.next;
r=q->next;

if(min>(p.data+q.data+r->data))
{
min=p.data+q.data+r->data;
}
}
更多追问追答
追问
能不能用指针法
追答
#include
void _max_cycle_sum(int *a,int len)
{
int *p,*q,sum,i=0,j,total=0;
p=a;
q=a;
for(i=0;ia+len-1)
p=a;//若超出了数组的范围,则需要回溯到开始位置
printf("%d ",*p);
sum=sum+(*p);
p++;
}
printf("\n%d \n",i+1,sum);//输出每一组答案
//*-------下面的写的不太好,可以改进,就是回溯的问题-------
if(p==a)
{//若取到最后两个元素和起始位置的一个元素,回溯到倒数第二个位置
p=a+len-2;
}
else if(p==a+1)
{//若取到倒数第一个元素和开始位置的两个元素,则回溯到倒数第一个位置
p=a+len-1;
}
else
{//否则后退两个位置
p=p-2;
}
i++;
if(total>sum)//比较交换
total=sum;
}
printf("\nthe min number:%d\n",total);
}
int main()
{
int a[]={5,2,6,1,4,1,9,2,3};
_max_cycle_sum(a,sizeof(a)/sizeof(int));
return 0;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式