C语言,不明白了。。。而且怎样缩短时间呀?

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

zhaoanqiEtayo @ 2023-08-08 17:31:20

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int l,m,i,j,p,q;//长度l,数目m;
    scanf("%d %d\n",&l,&m);
    int a[m][2],b[l+1];
    for(i=0;i<m;i++)
    {
        for(j=0;j<2;j++)
        {
           scanf("%d ",&a[i][j]); 
        }
    }
    for(p=0;p<=l;p++)
    {
        b[p]=0;
    }
    for(q=0;q<m;q++)
    {
       for(i=0;i<=l;i++)
       {
            while(a[q][0]<=i<=a[q][1])
            {
                b[i]=1;
            }
       }
    }
    int c=0;
    for(i=0;i<=l;i++)
    {
        if(b[i]==0)
        {
            c++;
        }
    }
    printf("%d",c);
    return 0;
}

by wang1h @ 2023-08-08 17:45:10

不是a[q][0]<=i<=a[q][1]a[q][0]<=i&&i<=a[q][1]

while没写i++


by wunaidedanjuan @ 2023-08-08 17:46:32

@zhaoanqiEtayo 中间两层 for 套一层 while 的循环可以缩成两层 for 循环

for(q=0;q<m;q++)
    {
       for(i=a[q][0];i<=a[q][1];i++)
       {
            b[i]=1;
       }
    }

by wang1h @ 2023-08-08 17:48:49

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int l,m,i,j,p,q;
    scanf("%d %d\n",&l,&m);
    int a[m][2],b[l+1];
    for(i=0;i<m;i++)
    {
        for(j=0;j<2;j++)
        {
           scanf("%d ",&a[i][j]); 
        }
    }
    for(p=0;p<=l;p++)
    {
        b[p]=0;
    }
    for(q=0;q<m;q++)
    {
        for(;a[q][0]<=a[q][1];a[q][0]++)
        {
            b[a[q][0]]=1;
        }
    }
    int c=0;
    for(i=0;i<=l;i++)
    {
        if(b[i]==0)
        {
            c++;
        }
    }
    printf("%d",c);
    return 0;
}

by wang1h @ 2023-08-08 17:49:33

楼上正解

@zhaoanqiEtayo


by zhaoanqiEtayo @ 2023-08-08 17:54:46

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int l,m,i,j,p,q;//长度l,数目m
    scanf("%d %d\n",&l,&m);
    int a[100][2],b[l+1];
    for(i=0;i<m;i++)
    {
        for(j=0;j<2;j++)
        {
           scanf("%d ",&a[i][j]); 
        }
    }
    for(p=0;p<=l;p++)
    {
        b[p]=0;
    }
    for(q=0;q<m;q++)
    {
        for(i=a[q][0];i<=a[q][1];i++)
        {
            b[i]=1;
        }
    }
    int c=0;
    for(i=0;i<=l;i++)
    {
        if(b[i]==0)
        {
            c++;
        }
    }
    printf("%d",c);
    return 0;
}

@wang1h 这样可以吗?


|