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