PTA:7-22 龟兔赛跑

7-22 龟兔赛跑 (20分)

乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息。乌龟每分钟可以前进3米,兔子每分钟前进9米;兔子嫌乌龟跑得慢,觉得肯定能跑赢乌龟,于是,每跑10分钟回头看一下乌龟,若发现自己超过乌龟,就在路边休息,每次休息30分钟,否则继续跑10分钟;而乌龟非常努力,一直跑,不休息。假定乌龟与兔子在同一起点同一时刻开始起跑,请问T分钟后乌龟和兔子谁跑得快?

输入格式:

输入在一行中给出比赛时间T(分钟)。

输出格式:

在一行中输出比赛的结果:乌龟赢输出@@,兔子赢输出_,平局则输出--;后跟1空格,再输出胜利者跑完的距离。

输入样例:

242

输出样例:

@_@ 726

自己写的

#include <stdio.h>

int main()
{
	int T,i;
	scanf("%d",&T);
	int s1=0,s2=0;//s1是龟龟,s2是兔兔 
	for(i=1;i<=T;i++)
	{
		s1=s1+3;
		s2=s2+9;
		if(i%10==0&&s2>s1)
		{
			if(T-i>=30)//所剩时间如果大于30分钟,直接让龟龟跑三十分钟,兔兔不动 
			{
			s1=s1+90;
			i+=30;
			}
			else // 所剩时间如果小于30分钟,直接让龟龟跑剩下的时间,兔兔不动 
			{
				s1=s1+3*(T-i);
				break;
			}
		}
	}
	if(s2-s1>0)
	printf("^_^ %d",s2);
	else if(s2==s1)
	printf("-_- %d",s2);
	else
	printf("@_@ %d",s1);
	
	return 0;
}
### 关于PTA C语言编程中的龟兔赛跑问题 对于给定的时间`T`,程序通过模拟乌龟兔子的比赛过程来判断最终谁领先并输出相应的结果以及距离。代码逻辑基于乌龟持续以恒定速度前进,而兔子间歇性休息的行为模式。 在代码实现上,定义变量`t`表示总时间,`a`代表兔子累计行程,`b`记录乌龟累计行程,`i`作为循环计数器用于追踪当前分钟数,还有`rest`用来标记兔子剩余的休息时间。每当经过一分钟(`while(i != t)`),如果此时不是处于休息状态,则增加兔子的速度至当前位置;不论如何都会无条件累加乌龟的位置因为其不会停止[`^1`]。 特别地,在每完成一轮十分钟周期后(`if (i % 10 == 0 && rest == 0)`),会检查两者之间的相对位置关系——一旦发现兔子已经超过了乌龟就会触发一次长达三十分钟的小憩(`rest = 30`) [`^2`]。 最后依据双方所达到的具体里程判定胜负情况,并按照指定格式打印出相应表情符号加上获胜方移动过的实际长度: ```c #include <stdio.h> int main() { int t, a = 0, b = 0, i = 0, rest = 0; scanf("%d", &t); while (i++ < t) { // 注意这里修改了循环条件以便更自然地遍历每一分钟 if (!rest) { a += 9; } else if (--rest <= 0){ rest = 0; // 确保休息结束后重置为零而不是负值 } b += 3; if (!(i % 10)) { if (a > b) { rest = 30; } } } if (a > b) { printf("^_^ %d\n", a); } else if (a < b) { printf("@_@ %d\n", b); } else { printf("-_- %d\n", a); } return 0; } ``` 此版本修复了一些潜在的问题比如当`rest`减到小于等于0时不应当继续减少而是应该设置回默认值即不再休眠的状态。此外调整了部分细节使得算法更加清晰易懂。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值