C语言提问:用指针法,有10个数围成一个圈,求出相邻三个数之和的最小值。

 我来答
chenbobio
推荐于2017-12-16 · TA获得超过429个赞
知道小有建树答主
回答量:85
采纳率:0%
帮助的人:111万
展开全部
#include<stdio.h>
void _max_cycle_sum(int *a,int len)
{
int *p,*q,sum,i=0,j,total=0;
p=a;
q=a;
for(i=0;i<=len-1;i++)
{//用total作为待比较的数对其初始化,因为连续的三位和比其数组总和小
total+=*q++;
}
i=0;
while(i<=len-1)
{//不难分析出的到的每三个数为一组答案,共有len-1组答案
sum=0;
for(j=0;j<3;j++)
{//取连续的三个数累加
if(p>a+len-1)
p=a;//若超出了数组的范围,则需要回溯到开始位置
printf("%d ",*p);
sum=sum+(*p);
p++;
}
printf("\n<%d组>%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;
}
丛凝丹Qg
2011-05-11
知道答主
回答量:21
采纳率:0%
帮助的人:13.4万
展开全部
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#define N 10

int addmin(int *p, int len)
{
int i, r, s, sum=INT_MAX, temp;

for (i=0; i<len; i++)
{
r = i-1;
if (r<0)
{
r += len;
}
s = i+1;
if (s>=len)
{
s -= len;
}

temp = (p[r] + p[i] + p[s]);

if (temp < sum)
{
sum = temp;
}
}

return sum;
}

int main()
{
int buf[N], i;
//初始化数组
for (i=0; i<N; i++)
{
buf[i] = i;
}

//输出相临的最小值
printf("%d\n", addmin(buf, N));

return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式