龟兔赛跑

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

【C语言】解决龟兔赛跑的问题相关推荐

  1. C语言通路寻找,用C语言解决迷宫问题设计与寻找通路问题.pdf

    用c语言解决迷宫设计与寻找通路问题 摘 要:本课程设计主要解决设计一个迷宫以及在给出一组入口和出口的情况下,求出一条通路的问题.在课程 设计中,程序设计语言采用VisualC++6.0,数据结构采用顺 ...

  2. C语言解决关于兔子的古典问题的代码

    把做工程过程经常用的一些代码段做个收藏,如下的代码是关于C语言解决关于兔子的古典问题的代码,希望对各位朋友有一些好处. #include "stdio.h" #include &q ...

  3. go iris 连接 mysql 异步_go语言解决并发的方法有哪些?

    简单回答下! 如果你只是一个 IO 操作,没必要在处理函数(协程)再开子协程,没什么用.因为,无论你开不开协程,都需要等待这个 IO 完成.一个 IO 操作,并发启不到提高性能的作用. 如果要提高性能 ...

  4. c语言数字的拆解_C语言解决变态推理题

    有两个数,a和b.a大于等于b,而且二者都是2到99之间的正整数. 现在我当着P和Q的面,分别悄悄告诉了P先生a和b的和,告诉了Q先生a和b的积. 接下来有这么一段对话: Q:我不知道a和b分别是啥. ...

  5. C语言解决约瑟夫问题详解的代码

    C语言解决约瑟夫问题详解的代码 参考文章: (1)C语言解决约瑟夫问题详解的代码 (2)https://www.cnblogs.com/odsxe/p/10791049.html (3)https:/ ...

  6. C语言 解决CCF 二十四点问题

    利用 C 语言 解决 CCF题库中的二十四点问题 特别致谢:原博主程序 编译环境: IDE:DEV-C++ 语言:C语言 CCF CSP官方往年题库链接点我进入 1. 题目如下: 解题思路: 此题难点 ...

  7. Go语言解决go get失败的问题

    Go语言解决go get失败的问题 文章目录 Go语言解决go get失败的问题 1.临时设置 2.长久生效 3.其他代理 由于墙的原因,GitHub下载最近失败的非常频繁,而且由于go的一些库在官网 ...

  8. C语言解决世界杯小组赛问题

    C语言解决世界杯小组赛问题 题目: 世界杯小组赛(胜得3分,平得1分,负不得分),计算每个队的积分并按排名先后输出,若积分相同,则按净球数排序(保证积分相等时输入的净球数不相等).输入M个队,出线队N ...

  9. 弟弟的作业c语言,用C语言解决弟弟的作业问题

    题目描述 你的弟弟刚做完了"100以内数的加减法"这部分的作业,请你帮他检查一下.每道题目(包括弟弟的答案)的格式为a+b=c或者a-b=c,其中a和b是作业中给出的,均为不超过1 ...

  10. c语言建模的程序,C程序设计五百例--用c语言解决学建模问题.doc

    PAGE PAGE 46 学会用c语言解决生活中的问题 [程序1] 题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位.十位.个位的数字都是1 ...

最新文章

  1. 强化学习(六) - 连续空间中的强化学习(RL in Continuous Spaces)及相关实例
  2. 做图形处理Linux小型主机,8个优秀的linux图形图像工具
  3. 计算机程序的思维逻辑 (38) - 剖析ArrayList
  4. 检索出现次数的SQL语句
  5. 保鲜、保生,生鲜电商的两码事
  6. 创业活动平台,2019路演活动报名网站
  7. linux make教程,Linux下makefile的一个简单框架
  8. Spring security UserDetailsService autowired注入失败错误
  9. C# Winform控件对透明图片重叠时导致图片不透明的解决方法
  10. python基础代码大全-python基础代码大全
  11. 从零开始的数模学习(5):TOPSIS法(评价类模型)
  12. Qt绘制椭圆曲线的角度问题(离心角和旋转角)
  13. intel 电脑棒一代linux,拆解:英特尔黑科技——电脑棒
  14. 计算机中丢失glut.dll,OpenGl的源程序,运行就提示,计算机丢失 glut32.dll文件
  15. HPC应用安装之roms
  16. CSDN博客——从失望到希望
  17. Ubuntu Kylin 20_10 在VMware Workstation Pro上安装
  18. cip查询(中国新闻出版信息网cip查询)
  19. jQuery(入门)
  20. 微信小程序「柒留言」 — 无留言公众号开通微信公众号留言功能(建议收藏)

热门文章

  1. 制作简易的web视频管理系统
  2. 机器学习西瓜书-1-2章
  3. mybatis-plus自动填充插入时间后有8小时时差
  4. 智慧树python程序设计基础课后答案_智慧树Python程序设计基础答案完整
  5. java优先队列二叉_二叉堆与Java中的优先队列
  6. html转换器 app,Coolutils Total HTML Converter(HTML转换器)
  7. 关于梦幻西游was\tcp素材文件的分析
  8. 华为nova5i计算机在哪,华为nova5和nova5i到底选哪个?看完这个就知道了
  9. @Valid请求400错误解决
  10. 28个免费在线格式转换工具