例如:数组为{1 2 3 5 6 7 10 12 15 16 17 18 19}
输出结果为{15 16 17 18 19}因为123连续三个数而15-19连续五个数
请问这样的程序该怎么写
遍历数组,记录每个元素后面连续数据的个数,比较所有长度,输出最大的即可。
运行结果:
代码:
#include <stdio.h>
int main()
{
int a[]={1,2,3,5,6,7,10,12,15,16,17,18,19};
int i,j,index=0;
int maxlen = 0,t = 0;
int n = sizeof(a)/sizeof(int);
//printf("%d\n",n);
for (i=0;i<n;i++)
{
t = 1; //长度重置为1
//从i+1开始,判断后面的数据是否连续,并记录连续的长度
for(j=i+1;j<n;j++)
{
if(a[j]-a[j-1]==1) //如果连续,长度+1
t++;
else
break; //如果不连续,结束循环
}
if(t>maxlen) //如果当前连续串的长度大于最大长度,把最大长度设为当前串的长度,并记录开始位置
{
index = i;
maxlen = t;
}
}
//输出
for(i=0;i<maxlen;i++)
{
if(i<maxlen-1)
printf("%d ",a[i+index]);
else
printf("%d",a[i+index]);
}
return 0;
}
你题目的解答代码如下:
#include <stdio.h>
int main()
{
int a[] = {1, 2, 3, 5, 6, 7, 10, 12, 15, 16, 17, 18, 19};
int n = sizeof(a) / sizeof(a[0]);
int i, start = 0, maxlen = 1, len = 1;
for (i = 1; i < n; i++) // //从下标1开始判断是否连续
{
if (a[i] == a[i - 1] + 1) // 如果与前面的数值连续,长度增加1 否则 长度重置1
len++;
else
len = 1;
if (len > maxlen) // 当前连续的长度大于最大长度,把最大长度设为当前的长度,并且更新开始位置
{
maxlen = len;
start = i - len + 1;
}
}
for (i = start; i < start + maxlen; i++)
{
if (i > start)
printf(" ");
printf("%d", a[i]);
}
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!