龟兔赛跑预测

501 阅读2分钟

解析: 虽然不知道这题要考察的点是什么,但是用到了一个很经典的方法:相同时间比路程,相同路程比时间。这里即使是兔子领先乌龟后在休息时,时间还是在增加的,但是兔子休息时只有时间增加,路程不变,而乌龟在兔子休息时时间和路程还是在一直变化。这一步就是解题最关键的一个步骤了。最后通过比较在相同的时间里,谁跑的路程先达到赛道的长度,判断最终的结果。

package _3_5_test;

import java.util.Scanner;

import _12_26_test.eleven;

/*龟兔赛跑预测
 * 兔子用的时间:s1
 * 乌龟用的时间:s2 = l/v2
 * 相同时间比距离,通过相同时间内谁通过的距离更长,判断谁胜利
 *
 * 
 * 
 * */
public class FifthOne {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Scanner scanner = new Scanner(System.in);

		// 兔子的速度
		int v1 = scanner.nextInt();
		// 乌龟的速度
		int v2 = scanner.nextInt();
		// 兔子领先t米时休息s秒
		int t = scanner.nextInt();
		int s = scanner.nextInt();
		// 赛道长度
		int l = scanner.nextInt();

		// 兔子到达终点所需的时间
		int s1 = 0;
		// 乌龟到达终点所需的时间
		int s2 = l / v2;

		// 兔子与乌龟间的距离
		int dis = 0;
		// 相同时间下兔子和乌龟跑的距离,分别用l1和l2表示
		int l1 = 0;
		int l2 = 0;

		while (true) {

			// 求出兔子乌龟间的距离
			dis = l1 - l2;
			// 对兔子乌龟间的距离进行判断
			if ((dis >= t)) {
				// 如果兔子比乌龟领先t米或以上,兔子的距离不变,时间继续增加,乌龟时间和距离都增加
				l2 = l2 + v2 * s;
				s1 += s;
			} else {
				l1 = l1 + v1;
				l2 = l2 + v2;
				s1++;
			}
			// 如果兔子或乌龟其中之一的距离大于或等于l,比赛结束
			if (l1 >= l || l2 >= l) {
				break;
			}

		}

		/*
		 * 如果通过时间判断比赛结果,有可能在相同时间内,两个都通过了终点, 但是通过终点的先后顺序不同,所以无法通过时间进行判断
		 */
		// 通过他们跑的距离判断谁先到达终点
		if (l2 < l1) {
			// 兔子获胜
			System.out.println("R");
			System.out.println(s1);
		} else if (l1 < l2) {
			// 乌龟获胜
			System.out.println("T");
			System.out.println(s2);
		} else if (l1 == l2) {
			// 平局
			System.out.println("D");
			System.out.println(s1);
		}

	}

}