遇题不决,先画草图
注释比较详细,仔细琢磨应该能看懂
import java.util.Scanner;
public class Main {
private static int R_l = 0, T_l = 0, S = 0;//R_L兔子跑的路程;T_l乌龟跑的路程;S最终结果时间。
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
final int v1 = sc.nextInt();//兔子速度
final int v2 = sc.nextInt();//乌龟速度
final int t = sc.nextInt(); //相差距离
final int s = sc.nextInt(); //兔子等待时间
final int l = sc.nextInt(); //总路程
int a = run(v1, v2, t, s, l);//随便一个字母(a) 接一下return。
//判断结果
if (R_l > T_l) {
System.out.println("R");
System.out.println(a);
} else if (T_l > R_l) {
System.out.println("T");
System.out.println(a);
} else {
System.out.println("D");
System.out.println(a);
}
}
/**
* @param v1 兔子速度
* @param v2 乌龟速度
* @param t 相差距离
* @param s 兔子等待时间
* @param l 总路程
* @return 共用了多长时间,即最终结果
*/
static int run(int v1, int v2, int t, int s, int l) {
//共同跑1s,并记录在S。
R_l += v1 * 1;
T_l += v2 * 1;
S++;
int temp = R_l - T_l;//临时存储相对距离
while (R_l < l && T_l < l) {
//相对距离小于t,递归继续共同跑
if (temp < t) {
run(v1, v2, t, s, l);
} else {
//这里是预防出现兔子在等乌龟时,s没到时间乌龟已经到了终点,所以每秒判断一次乌龟是否到了终点
//例如:兔子在等乌龟,乌龟只用了s/2就到了终点,结果应该是S+s/2,而不是S+s。
for (int i = 0; i < s; i++) {
T_l += v2 * 1;
S++;
if (T_l >= l)
break;
}
//判断相对距离,如果>t,兔子接着等
temp = R_l - T_l;
}
}
return S;
}
}
大学新生,有问题请指出。