赞
踩
PTA基础编程题目集7-22
龟兔赛跑这一问题可能有很多解答方法,例如结合数学图像之类的经典方法,除此之外,我还想到了一种方法。下面来看解析。
题目简介: 乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息。乌龟每分钟可以前进3米,兔子每分钟前进9米;兔子嫌乌龟跑得慢,觉得肯定能跑赢乌龟,于是,每跑10分钟回头看一下乌龟,若发现自己超过乌龟,就在路边休息,每次休息30分钟,否则继续跑10分钟;而乌龟非常努力,一直跑,不休息。假定乌龟与兔子在同一起点同一时刻开始起跑,请问T分钟后乌龟和兔子谁跑得快?
输入格式:
输入在一行中给出比赛时间T(分钟)。
输出格式:
在一行中输出比赛的结果:乌龟赢输出@ _ @,兔子赢则输出^ _ ^,平局则输出- _ -;后跟1空格,再输出胜利者跑完的距离。
案例
输入样例:
242
输出样例:
@_@ 726
思路
分析问题:乌龟速度 3 m/mim ;兔子速度:9 m/min
兔子每10分钟看一次路程,
如果超过乌龟,则兔子休息30min,需要注意的是,兔子休息期间,没有路程的增加,那么我们对此状态进行标记(mark),并记录休息结束时的时间(rest_time);
如果没超过乌龟,则继续跑10min。
乌龟则是一直再跑。
代码如下:(附带注释)
//龟兔赛跑 #include <stdio.h> #define Tortoise_speed 3 #define Rabbit_speed 9 typedef struct { int t_run; int mark; }Tortoise; //乌龟 typedef struct { int r_run; int mark; //标记是否休息 int rest_time; //记录休息的时间 }Rabbit; void init_Tortoise(Tortoise* p); //初始化乌龟的数据 void init_Rabbit(Rabbit* p); //初始化兔子的数据 void compare(Tortoise* p,Rabbit* q); //比较获胜 void Distance_Tortoise(Tortoise* p,int time); //计算乌龟的行程 void Distance_Rabbit(Rabbit* p,int time); //计算兔子的行程 int main(void) { int i; Tortoise Tor_1; //生成一只乌龟 Rabbit Rab_1; //生成一只兔子 int time; init_Tortoise(&Tor_1); //对这只乌龟进行初始化 init_Rabbit(&Rab_1) ; //对这只兔子进行初始化 scanf("%d",&time); int t = 0; while(t!=time){ if(t%10==0&&Rab_1.mark==0){ //兔子在跑 if(Tor_1.t_run<Rab_1.r_run){ //兔子超过了乌龟 Distance_Tortoise(&Tor_1,1); //只有乌龟跑 Rab_1.mark = 1; Rab_1.rest_time = t + 30; //兔子要休息了,记录30min }else{ //兔子没有超过乌龟,两个一起跑 Distance_Tortoise(&Tor_1,1); Distance_Rabbit(&Rab_1,1); } }else{ //当时间不是10的倍数时 if(Rab_1.mark==0){ //判断兔子的状态,0为跑步,1为休息 Distance_Tortoise(&Tor_1,1); Distance_Rabbit(&Rab_1,1); }else{ //兔子在休息 Distance_Tortoise(&Tor_1,1); } } ++t; //时间一分一分的流逝 if(Rab_1.rest_time == t){ //判断是否到了30min,到了兔子就更换状态,休息时间变为0 Rab_1.mark = 0; Rab_1.rest_time = 0; } } compare(&Tor_1,&Rab_1); //比较 //printf("\n乌龟:%d 兔子:%d",Tor_1.t_run,Rab_1.r_run); //测试 } void init_Tortoise(Tortoise* p){ //初始化乌龟的数据 p->t_run = 0; p->mark = 0; } void init_Rabbit(Rabbit* p){ //初始化兔子的数据 p->r_run = 0; p->mark = 0; //0代表正在跑,1代表休息 p->rest_time = 0; //当前30min 已经休息的时间 } void compare(Tortoise* p,Rabbit* q){ //比较获胜 if(p->t_run>q->r_run){ //乌龟获胜 printf("@_@ %d",p->t_run); }else if(p->t_run==q->r_run){ //平局 printf("-_- %d",p->t_run); }else{ //兔子获胜 printf("^_^ %d",q->r_run); } } void Distance_Tortoise(Tortoise* p,int time){ //乌龟行程 p->t_run += Tortoise_speed * time; } void Distance_Rabbit(Rabbit* p,int time){ //兔子行程 p->r_run += Rabbit_speed * time; }
运行结果如下:
242
@_@ 726
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。