题目描述
乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息。乌龟每分钟可以前进3米,兔子每分钟前进9米;兔子嫌乌龟跑得慢,觉得肯定能跑赢乌龟,于是,每跑10分钟回头看一下乌龟,若发现自己超过乌龟,就在路边休息,每次休息30分钟,否则继续跑10分钟;而乌龟非常努力,一直跑,不休息。假定乌龟与兔子在同一起点同一时刻开始起跑,请问T分钟后乌龟和兔子谁跑得快?
输入格式:
输入在一行中给出比赛时间T(分钟)。
输出格式:
在一行中输出比赛的结果:乌龟赢输出@@,兔子赢输出_,平局则输出--;后跟1空格,再输出胜利者跑完的距离。
解题思路
不知道为什么奔跑中平局出错了?
意料之外,居然这道题通过了诶!不过我写的好复杂,网友写的好简单哦!
代码
// 正确代码
#include <stdio.h>
int main(){
int t; scanf("%d", &t);
// 主要是求时间T内兔子跑了多远的距离
int status = 1; // status为1表明是奔跑状态
int curtime = 0;
int tortoise = 0;
int rabbit = 0;
int stime = 0;
int rtime = 0;
while(curtime < t){
// 乌龟走过的路程
tortoise += 3;
if (status == 1){
rtime++; // 兔子奔跑的时间
rabbit += 9; // 兔子走过的路程
if (rtime == 10){ // 兔子跑了10分钟
if (rabbit > tortoise){ // 兔子超过乌龟就休息
status = 0;
}
rtime = 0; // 记录兔子奔跑时间的变量清零
}
}
if (status == 0){
// rtime = 0;
stime++; // 兔子开始睡觉
if (stime > 30){ // 兔子睡30分钟
status = 1; // 兔子准备奔跑
stime = 0; // 记录兔子睡觉时间的变量清零
}
}
// 当前时间
curtime++;
// printf("tortoise=%d, rabbit=%d,rtime=%d, stime=%d, curtime=%d\n", tortoise, rabbit, rtime, stime, curtime);
// 输出乌龟和兔子的比赛结果
if (curtime == t){
if (tortoise > rabbit)
printf("@_@ %d\n", tortoise);
else if (tortoise < rabbit)
printf("^_^ %d\n", rabbit);
else
printf("-_- %d\n", rabbit);
}
}
return 0;
}
// 错误代码
#include <stdio.h>
int main(){
int t; scanf("%d", &t);
// 主要是求时间T内兔子跑了多远的距离
int status = 1; // status为1表明是奔跑状态
int curtime = 0;
int tortoise = 0;
int rabbit = 0;
int stime = 0;
int rtime = 0;
while(curtime < t){
// 乌龟走过的路程
tortoise += 3;
if (status == 1){
rtime++; // 兔子奔跑的时间
rabbit += 9; // 兔子走过的路程
if (rtime == 10){ // 兔子跑了10分钟
if (rabbit > tortoise){ // 兔子超过乌龟就休息
status = 0;
}
rtime = 0; // 记录兔子奔跑时间的变量清零
}
}
if (status == 0){
stime++; // 兔子开始睡觉
if (stime == 30){ // 兔子睡30分钟
status = 1; // 兔子准备奔跑
stime = 0; // 记录兔子睡觉时间的变量清零
}
}
// 当前时间
curtime++;
// 输出乌龟和兔子的比赛结果
if (curtime == t){
if (tortoise > rabbit)
printf("@_@ %d\n", tortoise);
else if (tortoise < rabbit)
printf("^_^ %d\n", rabbit);
else
printf("-_- %d\n", rabbit);
}
}
return 0;
}
过了一段时间在做这道题目。
#include <stdio.h>
int main(){
int t, rabbit = 0, tortoise = 0;
int time = 0, sign = 1, cnt = 0;
int tnt = 0;
scanf("%d", &t); //输入数据
while (1){ //处理数据
if (time == t){ //终止循环的条件
break;
}
time++; //时间每过去一分钟
//计算兔子跑的路程
if (tnt == 10){ //兔子跑了10分钟要和乌龟比路程
//如果兔子跑的距离大于等于乌龟时,兔子的跑步时间要归零
if (rabbit >= tortoise){
tnt = 0;
}
//如果兔子超过乌龟时,兔子就要开始休息了
if (rabbit > tortoise){
sign = 0;
}
}
if (sign==1){ //兔子在跑步
rabbit += 9;
tnt++; //统计兔子的跑步时间
}
if (sign==0){ //兔子在休息30分钟
cnt++;
if (cnt == 30){ //休息时间到要跑步了
sign = 1;
cnt = 0;
}
}
tortoise += 3; //乌龟跑的路程
// printf("time=%3d, rabbit=%3d, tortoise=%d, tnt=%d\n", time, rabbit, tortoise, tnt); //适当打印可以检查程序哪里发生了错误
}
if (tortoise > rabbit){ //输出数据
printf("@_@ %d", tortoise);
}
else if (tortoise < rabbit){
printf("^_^ %d", rabbit);
}
else{
printf("-_- %d", tortoise);
}
return 0;
}