这个代码是正确的,但我想问一下第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的值,这样就可以看得到n值的变化

#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;
}
printf("%d",n);//输出n 的值
if(n>max)
max=n;
}
printf("%d",max+1);
return 0;
}

你没想错,不连号以后n为0了,但是每次循环后移都要比较一下n和max,代码的逻辑也没有问题。你描述的比较模糊,不明白你哪里不清楚

n 是在for循环外面定义的,不是在佛瑞里面定义的,当f[i+1]-f[i]==1时,n的值会连续增加,因此最后只为5