题解:#51.校门外的树 审核通过

lyhldy CSP-J2二等 2024-07-21 15:46:54 2024-07-22 18:39:42 23

我们先分析一下题目:

某校大门外长度为l的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在l的位置;数 轴上的每个整数点,即0,1,2...l都种有一棵树。

很明显,我们需要一个bool型数组,1代表有树,0代表没有树:

bool tree[14];
memset(tree,0,sizeof(tree));

继续看题:

由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的 起始点终止点 表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后, 马路上还有多少棵树

思路:

先输入起始点和终止点,把 起始点和终止点之间的数组设置成0 ,最后统计数组中的1(有树)的个数,输出即可

int m, l, beg, end, sum = 0;
    cin >> l >> m;
    for (int i = 1; i <= m; i++) {
        cin >> beg >> end;   //输入起始点,终止点
        for (int j = beg; j <= end; j++) {  //
            tree[j] = 1;                    //把起始点和终止点之间的数组设置成0
        }                                   //
    }
    for (int x = 0; x <= l; x++) {   //
        if (!tree[x])                //统计
            sum++;                   //
    }

完整代码

自己写,别偷懒

{{ vote && vote.total.up }}