赞
踩
龟兔赛跑:
兔子虽然跑比乌龟快但它懒惰, 一旦任一秒结束后兔子发现自己领先t米或以上,它们就会停下来休息s秒。
对于不同的兔子,t,s的数值是不同的,但是所有的乌龟却是一致——它们不到终点决不停止。
记录兔子的速度v1(表示每秒兔子能跑v1米),乌龟的速度v2,以及兔子对应的t,s值,以及赛道的长度l 就能预测出比赛的结果。
写一个程序,对于输入的一场比赛的数据v1,v2,t,s,l,预测该场比赛的结果。
输入:
输入只有一行,包含用空格隔开的五个正整数v1,v2,t,s,l,
其中(v1,v2<=100;t<=300;s<=10;l<=10000且为v1,v2的公倍数)
输入样例:
10 5 5 2 20
输出:
输出包含两行,第一行输出比赛结果——一个大写字母“T”或“R”或“D”, 分别表示乌龟获胜,兔子获胜,或者两者同时到达终点。
第二行输出一个正整数,表示获胜者(或者双方同时)到达终点所耗费的时间(秒数)。
输出样例:
D
4
整个过程要么龟兔一起跑,要么只有乌龟在跑,而判断的唯一标准是兔子走过的路程是否超过乌龟t那么远的距离,所以以乌龟为参照,时间按秒流动,每次都判断是否超过这个距离t,于是有了while循环和if判断语句,也就有了依据是否满足条件的两个处理方式。有个细节,无论平局还是兔子获胜,算时间时都一定是取乌龟爬的时间,这很重要。
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int v1, v2, t, s, l; // 输入 v1 = sc.nextInt(); v2 = sc.nextInt(); t = sc.nextInt(); s = sc.nextInt(); l = sc.nextInt(); int lr = 0, lt = 0, tr = 0, tt = 0;//兔子路程,乌龟路程,兔子时间,乌龟时间 while ((lr < l) && (lr < l)) { if (lr - lt < t) { tr++; tt++; lr = v1 * tr; lt = v2 * tt; } else { //乌龟跑,更新lt,兔子不跑不更新 tt += s; lt = v2 * tt; } } if (lr == lt) { System.out.println("D"); System.out.println(l/v2); } else if (lr > lt) { System.out.println("R"); System.out.println(tt); } else { System.out.println("T"); System.out.println(l/v2); } sc.close(); } }
这个题没用到多少知识点,主要是个思维训练。一定要注意参数是否正确,做这个题把t和s搞反了,惯性思维把t当成休息时间,s当成距离差值,但偏偏提交后结果是部分正确,一直在查是否是方法的问题,饶了好大的圈子,结果改个参数立马解决,淦。
注意参数!
注意参数!
注意参数!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。