我们先分析一下题目:
某校大门外长度为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++; //
}
完整代码
自己写,别偷懒