c语言中找出数组内连续次数最多的那串数

例如:数组为{1 2 3 5 6 7 10 12 15 16 17 18 19}
输出结果为{15 16 17 18 19}因为123连续三个数而15-19连续五个数
请问这样的程序该怎么写

遍历数组,记录每个元素后面连续数据的个数,比较所有长度,输出最大的即可。
运行结果:

img

代码:

#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;
}

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632