C语言用指针方法实现题目。有10个人围成一圈,求出相邻三个数之和的最小值
2个回答
展开全部
#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);
}
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);
}
展开全部
可以用循环链表来实现
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;
}
}
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;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询