校门外的树 - Grids2808

校门外的树

问题描述:

某校大门外长度为 L 的马路上有一排树,每两棵相邻的树之间的间隔都是1 米。我们
可以把马路看成一个数轴,马路的一端在数轴0 的位置,另一端在L 的位置;数轴上的每
个整数点,即0,1,2,……,L,都种有一棵树。
由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已
知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些
区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上
还有多少棵树。

分析

  1. 动态生成一个INT型数组,存的数据从1开始直到(L+1)结束。
  2. 输入一个区域之后,即从数组里将包含的数据变成0。
  3. 计算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) + "棵树。");
		
	}
}
posted @ 2014-11-08 14:16  Murderer  阅读(245)  评论(0编辑  收藏  举报