赞
踩
解题思路:
因为考虑到兔子会休息,然后此时兔子的时间是不会增加的,只有乌龟的时间在增加
对于while循环里面的代码,应该都是可以看懂的,在兔子走过的路程s1-s2(乌龟走过的路程)
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" <
//这里当同时到达终点的时候,因为同时到达,肯定是兔子有过休息的,所以兔子到达终点的话,时间肯定不是兔子的
如样例 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
注意事项:
参考代码:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。