解题思路:
因为考虑到兔子会休息,然后此时兔子的时间是不会增加的,只有乌龟的时间在增加
对于while循环里面的代码,应该都是可以看懂的,在兔子走过的路程s1-s2(乌龟走过的路程)<t 的时候
t1++, t2++;
s1 = v1*t1;
s2 = v2*t2;
当>=t的时候,兔子休息,兔子原地不动,乌龟继续前进,
t2 += s;
s1 = v1*t1; //t1时间没有增加,相当于原地不动
s2 = v2*t2;//前进了s秒的路程
当超过终点后,就跳出while循环
if (s1 < s2)cout << "T\n" << l / v2<< endl;
这里,乌龟走到了终点,乌龟赢,所以时间就是路程/速度=时间
else if (s1 == s2)cout << "D\n" <<t2<< endl;
//这里当同时到达终点的时候,因为同时到达,肯定是兔子有过休息的,所以兔子到达终点的话,时间肯定不是兔子的
如样例 10 5 5 2 20
第一秒过后,达到相差5的条件,此时,s兔 = 10,s龟 = 5,t兔=t龟 = 1秒
然后兔子休息后,t兔=1,t龟 = 3秒,此时s兔=10,s龟=15;
下一秒后,都同时达到终点,样例时间是算乌龟的时间,所以平局时间算乌龟的时间
else cout << "R\n" << t2 << endl;
为什么兔子赢了也还是乌龟消耗的时间呢?(这里乌龟并没有达到终点)
如输入 10 5 5 1 40
s兔 s龟 t1 t2
10 5 1 1
10 10 1 2 //休息
20 15 2 3
20 20 2 4 //休息
30 25 3 5
30 30 3 6 //休息
40 35 4 7
所以看出来,兔子自己是用了4秒跑到终点,但是中途休息的时间也是要算进去的
休息了3次,就是4+3=7,也就是兔子用的时间,但是此时达到终点后,乌龟虽然还没到终点
但是时间是和兔子的时间一样的,所以兔子赢了,时间也是t2
注意事项:
参考代码:
0.0分
17 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复