飞道的博客

蓝桥杯 试题 基础练习 龟兔赛跑预测——18行代码AC

348人阅读  评论(0)
问题描述:

 话说这个世界上有各种各样的兔子和乌龟,但是研究发现,所有的兔子和乌龟都有一个共同的特点——喜欢赛跑。于是世界上各个角落都不断在发生着乌龟和兔子的比赛,小华对此很感兴趣,于是决定研究不同兔子和乌龟的赛跑。他发现,兔子虽然跑比乌龟快,但它们有众所周知的毛病——骄傲且懒惰,于是在与乌龟的比赛中,一旦任一秒结束后兔子发现自己领先t米或以上,它们就会停下来休息s秒。对于不同的兔子,t,s的数值是不同的,但是所有的乌龟却是一致——它们不到终点决不停止。
  然而有些比赛相当漫长,全程观看会耗费大量时间,而小华发现只要在每场比赛开始后记录下兔子和乌龟的数据——兔子的速度v1(表示每秒兔子能跑v1米),乌龟的速度v2,以及兔子对应的t,s值,以及赛道的长度l——就能预测出比赛的结果。但是小华很懒,不想通过手工计算推测出比赛的结果,于是他找到了你——清华大学计算机系的高才生——请求帮助,请你写一个程序,对于输入的一场比赛的数据v1,v2,t,s,l,预测该场比赛的结果。

这道题乍一看是个大水题,但仔细想来坑却不少,很有意思,着实把笔者坑的不清。这里贴一下需要注意的点:

1、一定要理解好同步的概念,也就是严格以秒为单位运行程序。每一秒过后,都需要判断某个动物是否通过终点。比如:兔子在睡觉时,乌龟以v2的速度走s秒,这时我们如果直接sec+=s, L龟 += v2*t 就错了。说不定乌龟在期间某一秒就过终点了呢? 这种情况下,秒数就不准确了
2、每一“秒”过后,都需要判断是否有动物通过终点。

代码:

#include<cstdio>
int main() {
	int v1, v2, t, s, l, l1 = 0, l2 = 0, sec = 0;
	scanf("%d%d%d%d%d", &v1, &v2, &s, &t, &l);
	while(l1 < l && l2 < l) {				//判断
		l1 += v1; l2 += v2; sec++;
		if(l1 >= l || l2 >= l) break;		//判断是否有通过终点的动物
		if(l1-s >= l2) { 
			int sec1 = sec;
			while((l2 < l) && (sec != sec1+t)) { l2+=v2; sec++; }	//还是判断
		} 
	}
	if(l1 > l2) printf("R\n%d", sec);
	else if(l1 < l2) printf("T\n%d", sec);
	else printf("D\n%d", sec);
	return 0;
}

转载:https://blog.csdn.net/weixin_43899069/article/details/104576781
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场