这个代码是正确的,但我想问一下第19行,当不出现连号以后n就已经变为0了啊,n在和max比较的时候n不是应该也为0吗,为什么是15行那个n的值和max在比,还是我想错了

img


#include<stdio.h>
int main()
{
    int a;
    scanf("%d",&a);
    int i,f[a],n=0,max=0;
    for(i=0;i<a;i++)
    {
        scanf("%d",&f[i]);
    }
    for(i=0;i<a;i++)
    {
        if(f[i+1]-f[i]==1)
        {
            n++;
        }
        else
        {
            n=0;
        }
        if(n>max)
        max=n;
    }
    printf("%d",max+1);
    return 0;
}

n是存连续个数的,在第一个if判断中,用第二个去减第二个检验是否连续,连续就++,不连续就赋0。因此即使一次连续后面被赋0了,在打印的时候会再加一次。最后的n和max判断,n和max只要都为0才可能相等,为0时哪个打印都一样的,因为最后都会++。

没有想错,就是n和max比较,n是多少就多少,n=0是因为已经不是连续的数字了,所以重新计算连号的数字的长度,n=0也并不影响max的取值

if()else() 非此即彼,实现连续性的判断,max 保留的是前一次的 n 的值。