龟兔赛跑 PAT

原题如下:

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

输入格式:

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

输出格式:

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

输入样例:

242

输出样例:

@_@ 726
这道题在做的时候关键是要把兔子的跑步规律搞清楚,跑10min,休息30min,再跑10min,中间可能连续跑20min。在找乌龟和兔子之间的路程关系的时候会发现,每过90分钟,相当于重新起跑,因此他们之间的路程是以90*3为周期的,因此只需要找前90min内乌龟和兔子之间的路程关系即可。分析可知:

t = 0时,兔子 = 乌龟

0< t < 30时,兔子 > 乌龟

t = 30时,兔子 = 乌龟

30 < t < 45时,乌龟 > 兔子

t = 45时,兔子 = 乌龟

45 < t <= 50时,兔子 > 乌龟(k * 270 + temp * 9)

50 < t < 60时,兔子 > 乌龟(k * 270 + 180)

t = 60时,兔子 = 乌龟

60 < t < 90时,乌龟 > 兔子

(注意:提干中说需要输出赢家跑过的路程,但是当两个平局时谁是赢家呢?所以要不要输出呢?当时是要的,随便输出谁的路程都可以,这个比较坑,本来以为如果平局的话不用输出路程,因为根本不存在赢家啊……)

代码如下:

#include 
int main()
{
	int T, temp, k;
	scanf("%d", &T);
	temp = T % 90;//确定几个回合过去之后剩余多少分钟
	k = T / 90;//确定过了几个回合,每90分钟重复一次
	if (temp < 30 && temp > 0)
		printf("^_^ %d\n", k * 270 + temp * 9);
	else if (temp == 30)
		printf("-_- %d\n", k * 270 + temp * 3);
	else if (temp > 30 && temp < 45)
		printf("@_@ %d\n", k * 270 + temp * 3);
	else if (temp == 45)
		printf("-_- %d\n", k * 270 + temp * 3);
	else if (temp > 45 && temp <= 50)
		printf("^_^ %d\n", k * 270 + 90 + (temp - 40) * 9);
	else if (temp > 50 && temp < 60)
		printf("^_^ %d\n", k * 270 + 180);
	else if (temp == 60)
		printf("-_- %d\n", k * 270 + temp * 3);
	else if (temp > 60 && temp < 90)
		printf("@_@ %d\n", k * 270 + temp * 3);
	else
		printf("-_- %d\n", k * 270 + temp * 3);
	return 0;
}


 
  





你可能感兴趣的:(龟兔赛跑 PAT)