大佬,哪里出问题了

P1047 [NOIP2005 普及组] 校门外的树

2369159795dw @ 2024-02-27 14:02:48

#include<stdio.h>
int main()
{
    int l,m,i,j,cot;
    cot=0;
    int u[m],v[m],b[++l];
    scanf("%d %d",&l,&m);
    for(i=0;i<=l;i++)
    {
        b[i]=0;
    }
    for(i=0;i<m;i++)
    {
        scanf("%d %d",&u[i],&v[i]);
        for(j=0;j<=l;j++){
        if(j>=u[i]&&j<=v[i])
        {
            b[j]=1;
        }
    }
    }
    for(i=0;i<=l;i++)
    {
        if(b[i]==0)
        cot++;
    }
    printf("%d",cot);
} 

by HMSVanguard @ 2024-02-27 14:13:42

int u[m],v[m],b[++l];

scanf("%d %d",&l,&m);

这里要改成

scanf("%d %d",&l,&m);

int u[m],v[m],b[l+1];

原程序中先定义b数组再输入的l,定义b[l]时的l根本不知道是什么值。b数组的大小就出错了。b[++l]这样的写法不对,++l会将l的值加一,加完以后在for循环中就会多循环一次导致答案错误。改成l+1后l的值就不会变了。(还是不太建议用变量来定义数组大小)


by 2369159795dw @ 2024-02-27 18:37:11

谢谢大佬


|