题目
一坐标轴表示某道路,从 0 开始到 L,整数位置上都种有一棵树。现该路修建地铁,要砍掉铁路线路上的树木(铁路可以重叠)。例如:L 等于 10,铺设 4 条铁路,坐标是 1到 2,2 到 3,2 到 8,3 到 5。那么 1 到 8 坐标点的树都要砍掉,剩下 0,9,10 三棵。程序要求,输入 L,输入铺设铁路条数 m。然后输入 m 组铁路的坐标。求剩下多少棵树。
思路
创建一个很长的数组?
然后 遍历坐标数组 把每一个点的首尾之间的值置位1
再次赋值
#include<stdio.h>
void buildRoad(int *Road,int a[][2], int m,int L );
int main() {
int L = 10;
int m = 4;
int xy[m][2] = {{1,2},
{2,3},
{2,8},
{3,5}
};
int Road[L+1] = {0};
buildRoad(Road,xy,m,L+1);
for(int i = 0; i<L+1; i++) {
printf("Road[%d]: %d\n",i,Road[i]);
}
return 0;
}
void buildRoad(int *Road,int a[][2], int m,int L ) {
for(int i = 0; i < m; i++) {
for(int j = a[i][0]; j<=a[i][1]; j++) {
Road[j] = 1;
}
}
}