C语言求助!!!!

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

AkiraZWX @ 2023-02-16 12:06:25

我感觉思路没问题呀 错在哪呢

int main ()
{

    int tree[100000];
    int a=0,m=0;
    int u=0,v=0;
    int cnt=0;
    scanf("%d %d", &a, &m);

    for( int i=0; i<a; i++){
        tree[i]=1;
    } //初始化数组 

    for (int i=1; i<=m; i++){
        scanf("%d %d", &u, &v);
        for (int i=u; i<v;i++){
            tree[i]=0;
        }
    }

    for (int i=1; i<a; i++){
        if ( tree[i]) cnt++;
    }
    printf("%d", cnt);
    return 0;
}

by AkiraZWX @ 2023-02-16 12:06:46

思路:首先用数组来当作树的有无 再根据每次读入的区域来将这块区域的树铲除 也就是从1变0 最后遍历数组用计数器来找出有多少颗树


by ud2_ @ 2023-02-16 12:15:06

@AkiraZWX 读题。

马路的一端在数轴 0 的位置,另一端在 l 的位置;数轴上的每个整数点,0,1,2,…,l,都种有一棵树。

把这些区域中的树(包括区域端点处的两棵树)移走。


by AkiraZWX @ 2023-02-16 13:52:53

@ud2_ 好的好的 我改了一下 虽然有AC的但是只有前三个T_T


int main ()
{
    int tree[1000001];
    int a=0,m=0;
    int u=0,v=0;
    int cnt=0;
    scanf("%d %d", &a, &m);

    for( int i=0; i<=a; i++){
        tree[i]=1;
    } //初始化数组 

    for (int i=1; i<=m; i++){
        scanf("%d %d", &u, &v);
        for (int i=u; i<=v;i++){
                tree[i]=0;
        }
    }

    for (int i=0; i<a; i++){
        if ( tree[i]) cnt++;
    }
    printf("%d", cnt);
    return 0;
}

by AkiraZWX @ 2023-02-16 14:19:40

@ud2_ 已经AC了 谢谢大佬T_T 最后修改了最后遍历输出那里的循环条件


by AkiraZWX @ 2023-02-16 14:23:00

@ud2_


#include<stdio.h>
int main ()
// 思路:首先用数组来当作树的有无 再根据每次读入的区域来将这块区域的树铲除 也就是从1变0 最后遍历数组用计数器来找出有多少颗树 
{
    int tree[10000001];
    int a=0,m=0;
    int u=0,v=0;
    int cnt=0;
    scanf("%d %d", &a, &m);

    for( int i=0; i<=a; i++){
        tree[i]=1;
    } //初始化数组 

    for (int i=1; i<=m; i++){
        scanf("%d %d", &u, &v);
        for (int i=u; i<=v;i++){
                tree[i]=0;
        }
    }//根据次数分别读入每个区块并且铲除该区块内的树

    for (int i=0; i<=a; i++){
        if ( tree[i]) cnt++;
    }
    printf("%d", cnt);//遍历数组中有树的点 计数器加一 最后输出结果
    return 0;
}

|