校门外的树
问题描述:
某校大门外长度为 L 的马路上有一排树,每两棵相邻的树之间的间隔都是1 米。我们
可以把马路看成一个数轴,马路的一端在数轴0 的位置,另一端在L 的位置;数轴上的每
个整数点,即0,1,2,……,L,都种有一棵树。
由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已
知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些
区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上
还有多少棵树。
分析
- 动态生成一个INT型数组,存的数据从1开始直到(L+1)结束。
- 输入一个区域之后,即从数组里将包含的数据变成0。
- 计算0的个数,以(L+1)减去既是剩余的树的数目。
解决方案:
public class Grids2808 {
/**
* @Murderer
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
@SuppressWarnings("resource")
Scanner sc = new Scanner(System.in);
int L, M = 0;
System.out.println("请输入马路的长度L和要建地铁的区域数目M:");
L = sc.nextInt();
int Road[];
Road = new int[L];
//下面开始种树
for (int i = 1; i < L+1; i++) {
Road[i-1] = i;
}
M = sc.nextInt();
System.out.println("输入这" + M + "组数据:");
//下面开始砍树
for (int i = 0; i < M; i++) {
int begin, end = -1;
begin = sc.nextInt();
end = sc.nextInt();
for (int j = begin; j <= end; j++) {
Road[j] = 0;
}
}
//下面计算被砍掉的树的数目
int count = 0;
for (int i = 0; i < L; i++) {
if (Road[i] == 0)
count++;
}
System.out.println("还剩下" + (L + 1 - count) + "棵树。");
}
}