贺州学院ivy


私信TA

用户名:Livy

访问量:22606

签 名:

好好学习,天天向上,汝何秀?

等  级
排  名 135
经  验 7530
参赛次数 5
文章发表 25
年  龄 0
在职情况 学生
学  校 贺州学院
专  业 软件工程

  自我简介:

假猪套天下第一

解题思路:


因为考虑到兔子会休息,然后此时兔子的时间是不会增加的,只有乌龟的时间在增加


对于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




注意事项:

参考代码:

SNTFR1ATCR{G)2ZRLRZQBDU.png

 

0.0分

22 人评分

  评论区

为什么乌龟先到终点不能直接用乌龟消耗的时间,而是路程/乌龟的速度??
2023-01-04 11:58:28
//
// 蓝桥杯题库 基础训练 龟兔赛跑预测
#include <cstdio>

int v1, v2, t, s, L;        // v1 兔子, v2 乌龟
int cur1 = 0, cur2 = 0;

int main(){
    scanf("%d%d%d%d%d", &v1, &v2, &t, &s, &L );
    int time = 0;
    while (cur1 < L && cur2 < L){
        if (cur1 - cur2 >= t){
//            cur2 += v2 * s;
//            time += s;    // 可能不需 s 秒 乌龟就到了
            int tmp = 0;
            while (cur2 < L && tmp < s){    // 在兔子休息的时间内逐秒让乌龟前进
                cur2 += v2;
                time++;
                tmp++;
            }
            if (cur2 >= L)
                break;
2020-02-09 11:56:27
虽然距离差小于t,但如果兔子处于等待中,但兔子还是动弹不得呀
2019-10-31 22:15:19
#include <bits/stdc++.h>
using namespace std;

int main()
{
	int v1, v2, t, s, l;
	scanf("%d%d%d%d%d", &v1, &v2, &t, &s, &l); 
	int t1 = 0, t2 = 0, s1 = 0, s2 = 0;
	while(s1 < l && s2 < l) {
		if(s1 - s2 < t) {
			t1++;
			t2++;
			s1 = v1 * t1;
			s2 = v2 * t2;
		} else {
			int tmp = 0;
			while(s2 < l && tmp < s) {   //主要时这块,说不定不需要s秒,龟就已经到终点,这是兔子还在睡觉
				t2++;
				tmp++; 
				s2 = v2 * t2;
			}
		}
	}
	if(s1 == s2) printf("D\n");
	else if(s1 < s2) printf("T\n");
	else printf("R\n");
	printf("%d\n", t2);
	
	return 0;
}
2019-03-07 23:00:20
input:10 3 20 15 3450


output:
T

1150


这个数据 验证不对  你可以亲测
2019-03-07 22:52:10
  • «
  • 1
  • »