问题:输入N个数字,判断其中连续5个数的最大值,连续的定义为按输入顺序,数列尾和数列首我们也认为是连续的,输入数据保证只会出现一组最大值
输入,怎样求出和最大的连续的5个数;
如:
输入:
20
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
输出:
The position is 16,17,18,19,20
The numbers are 16,17,18,19,20
The MAX is 90
问题:输入N个数字,判断其中连续5个数的最大值,连续的定义为按输入顺序,数列尾和数列首我们也认为是连续的,输入数据保证只会出现一组最大值
输入,怎样求出和最大的连续的5个数;
如:
输入:
20
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
输出:
The position is 16,17,18,19,20
The numbers are 16,17,18,19,20
The MAX is 90
代码如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int N;
int* p = 0;
int i,j,max = 0,tp = 0;
int index = 1;
scanf("%d",&N);
if(N < 5)
{
printf("输入的数字小于5");
return 0;
}
p = (int*)malloc((N+4)*sizeof(int));
for(i=0;i<N;i++)
scanf("%d",&p[i]);
//复制前四个数到末尾
for(i=0;i<4;i++)
{
p[N+i] = p[i];
max += p[i];
}
max += p[4];
for (i = 1;i<N;i++)
{
tp = 0;
for (j=0;j<5;j++) //计算5个数的和
tp += p[i+j];
if(tp > max)
{
max = tp;
index = i+1;
}
}
printf("The position is ");
for(i=0;i<5;i++)
{
if(i<4)
printf("%d ",index+i);
else
printf("%d\n",index+i);
}
printf("The numbers are ");
for(i=0;i<5;i++)
{
if(i<4)
printf("%d ",p[index+i-1]);
else
printf("%d\n",p[index+i-1]);
}
printf("The Max is %d",max);
free(p);
p = 0;
return 0;
}