当前位置:   article > 正文

【C语言】解决龟兔赛跑的问题_龟兔赛跑编程乌龟速度

龟兔赛跑编程乌龟速度

龟兔赛跑

PTA基础编程题目集7-22

龟兔赛跑这一问题可能有很多解答方法,例如结合数学图像之类的经典方法,除此之外,我还想到了一种方法。下面来看解析。

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

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

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

案例

输入样例:
242
输出样例:
@_@ 726
  • 1
  • 2
  • 3
  • 4

思路
分析问题:乌龟速度 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;
} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80

运行结果如下:

242
@_@ 726
  • 1
  • 2

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/64434
推荐阅读
相关标签
  

闽ICP备14008679号