当前位置:   article > 正文

蓝桥志15——龟兔赛跑预测

蓝桥志15——龟兔赛跑预测

问题

龟兔赛跑:

兔子虽然跑比乌龟快但它懒惰, 一旦任一秒结束后兔子发现自己领先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();
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

经验

这个题没用到多少知识点,主要是个思维训练。一定要注意参数是否正确,做这个题把t和s搞反了,惯性思维把t当成休息时间,s当成距离差值,但偏偏提交后结果是部分正确,一直在查是否是方法的问题,饶了好大的圈子,结果改个参数立马解决,淦。
注意参数!
注意参数!
注意参数!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/64359
推荐阅读
相关标签
  

闽ICP备14008679号