云计算百科
云计算领域专业知识百科平台

GESP2026年9月认证C++一级( 第三部分编程题(1、新龟兔赛跑))精讲


一、先听懂故事:新龟兔赛跑 🐢🐇

很久很久以前……

兔子和乌龟进行了一场赛跑。

以前兔子因为骄傲自满,比赛的时候睡觉,输给了乌龟。

这一次兔子吸取了教训:

“这次我绝对不睡觉!”

所以:

  • 🐢 乌龟会一直按照固定速度跑到终点;

  • 🐇 兔子不会再睡觉,但是它会在终点前睡一会儿;

  • 谁先到达终点,谁就获胜。

题目给我们三个数字:

第1行:乌龟从起点到终点需要的时间
第2行:兔子的速度
第3行:兔子在终点前睡觉的时间

起点到终点的距离固定为:

1000.0

题目要求我们判断:

乌龟赢?
兔子赢?
还是平局?

并且第二行输出:

兔子到达终点所需要的总时间。


二、第一件事情:先把题目转换成“数学语言”

假设输入:

20.0
100.0
11.0

那么:

乌龟时间 = 20.0
兔子速度 = 100.0
兔子睡觉时间 = 11.0

兔子跑的距离是:

1000.0

我们知道:

⭐ 时间 = 路程 ÷ 速度

所以兔子不停下来跑完全程需要:

1000.0 ÷ 100.0
= 10.0

但是!

兔子还要睡:

11.0

所以兔子的总时间:

10.0 + 11.0
= 21.0

于是:

🐢 乌龟:20.0
🐇 兔子:21.0

谁更快?

当然是:

20.0 < 21.0

所以:

🐢 乌龟获胜!

题目的样例输出正是:

turtle
21.00


三、这道题真正的核心只有两个步骤

我们可以把整个题目压缩成一张“藏宝图”:

输入
↓
┌─────────────────┐
│ 乌龟需要的时间 t1 │
│ 兔子的速度 v │
│ 兔子睡觉时间 t2 │
└─────────────────┘
↓
计算兔子跑步时间
↓
1000.0 / v
↓
加上兔子的睡觉时间
↓
兔子总时间 tt
↓
┌────────┼────────┐
↓ ↓ ↓
tt < t1 tt > t1 tt == t1
↓ ↓ ↓
rabbit turtle tie

是不是一下就简单了?


四、第一步:定义三个变量

我们可以写:

float t1, v, t2;

分别表示:

t1 → 乌龟需要的时间
v → 兔子的速度
t2 → 兔子睡觉的时间

为什么使用:

float

而不是:

int

因为题目的数据可能是:

20.0
100.0
11.0

也就是说:

可能有小数。

所以我们使用能够保存小数的 float。


五、第二步:输入数据

代码:

cin >> t1 >> v >> t2;

如果输入:

20.0
100.0
11.0

那么:

t1 = 20.0
v = 100.0
t2 = 11.0

可以想象成三个小盒子:

┌────────────┐
│ t1 = 20.0 │ 🐢
└────────────┘

┌────────────┐
│ v = 100.0 │ 🐇
└────────────┘

┌────────────┐
│ t2 = 11.0 │ 😴
└────────────┘


六、第三步:计算兔子的总时间

这是全题最重要的一行:

float tt = 1000.0 / v + t2;

我们拆开来看。


① 1000.0 / v

这是:

兔子跑完整个1000米需要的时间。

因为:

时间 = 路程 ÷ 速度

所以:

1000.0 ÷ v


② + t2

兔子跑完以后还需要加上:

睡觉时间

所以:

兔子总时间
=
跑步时间
+
睡觉时间

也就是:

float tt = 1000.0 / v + t2;


七、拿样例走一遍

输入:

20.0
100.0
11.0

先计算:

1000.0 / 100.0
= 10.0

再加:

10.0 + 11.0
= 21.0

所以:

tt = 21.0


八、第四步:比较谁先到达

现在我们有:

t1 = 乌龟时间
tt = 兔子时间

所以直接比较:

if (tt < t1)

什么意思?

如果兔子用的时间更少,兔子获胜。

那么:

printf("rabbit\\n");


第二种情况

如果:

else if (tt > t1)

说明:

兔子需要更多时间。

所以:

🐢 乌龟更快

输出:

printf("turtle\\n");


第三种情况

如果:

else

意味着:

tt == t1

也就是:

两个人恰好同时到达!

所以:

printf("tie\\n");


九、把整个判断画成“比赛终点门”

可以把它想象成终点有一个裁判:

🏁 终点裁判
│
┌────────┴────────┐
│ │
兔子时间 tt 乌龟时间 t1
│ │
└────────┬────────┘
↓
比较时间
↓
┌───────────┼───────────┐
↓ ↓ ↓
tt<t1 tt>t1 tt=t1
↓ ↓ ↓
rabbit turtle tie

记住:

比赛比的是“时间”,不是速度!

这是这道题非常容易出现的思维陷阱。


十、为什么不能直接比较兔子的速度和乌龟?

比如:

乌龟时间:20秒
兔子速度:100
兔子睡觉:11秒

我们不能说:

“兔子的速度100,看起来一定比乌龟快。”

因为乌龟给我们的不是速度,而是:

乌龟已经跑完全程需要20秒。

而兔子需要我们自己计算:

1000 / 100 + 11
= 21

最后比较:

20秒 vs 21秒

所以:

🐢 乌龟赢。


十一、第二个样例:兔子赢了 🐇

题目第二组输入:

20.0
100.0
9.0

我们计算:

兔子跑步时间:

1000 ÷ 100
= 10

兔子睡觉:

9

所以:

兔子总时间
= 10 + 9
= 19

乌龟:

20

比较:

19 < 20

所以:

🐇 兔子获胜!

输出:

rabbit
19.00


十二、为什么输出是 19.00,而不是 19?

这个地方很值得初学者注意。

题目要求输出二位小数。

参考程序:

printf("%.2f\\n", tt);

这里:

%.2f

就是:

用小数形式输出,并且保留2位小数。

所以:

19

会显示成:

19.00

而:

21

会显示成:

21.00


十三、%.2f到底是什么意思?

把它拆成:

%
.2
f

f

表示:

按浮点数格式输出。

.2

表示:

小数点后保留2位。

所以:

printf("%.2f", 19.5);

输出:

19.50

而:

printf("%.2f", 19.567);

会按照两位小数的要求输出相应结果。


十四、完整参考程序

#include <iostream>
#include <cstdio>
using namespace std;

int main() {
float t1, v, t2;

cin >> t1 >> v >> t2;

float tt = 1000.0 / v + t2;

if (tt < t1)
printf("rabbit\\n");
else if (tt > t1)
printf("turtle\\n");
else
printf("tie\\n");

printf("%.2f\\n", tt);

return 0;
}

这也是这道题的核心程序结构。


十五、我们逐行解析

#include <iostream>
#include <cstdio>

↓

📚 我要使用输入输出工具。


using namespace std;

↓

后面的代码可以直接使用 cin 等名字。


int main()

↓

🎬 比赛正式开始!


float t1, v, t2;

↓

准备三个小盒子:

🐢 乌龟时间
🐇 兔子速度
😴 兔子睡觉时间


cin >> t1 >> v >> t2;

↓

把输入的数据装进三个盒子。


float tt = 1000.0 / v + t2;

↓

计算兔子的总时间。


if (tt < t1)

↓

兔子时间更短吗?

如果是:

printf("rabbit\\n");

↓

🐇 兔子赢!


else if (tt > t1)

↓

兔子时间更长吗?

如果是:

printf("turtle\\n");

↓

🐢 乌龟赢!


else

↓

两个人时间一样!

printf("tie\\n");

↓

🤝 平局!


printf("%.2f\\n", tt);

↓

把兔子的总时间保留两位小数打印出来。


十六、这道题最重要的“做题模板”

以后大家再遇到类似的:

两个人比赛,谁先到达?

可以直接使用这个思考模板:

第1步:分别确定两个人的时间

人物A时间 = ?
人物B时间 = ?


第2步:如果某个人没有直接给时间

利用:

时间 = 路程 ÷ 速度


第3步:把额外花费的时间加进去

例如:

总时间 = 跑步时间 + 睡觉时间


第4步:比较时间

A时间 < B时间 → A赢

A时间 > B时间 → B赢

A时间 == B时间 → 平局


十七、初学者容易犯的4个错误

❌ 错误1:把速度当成时间比较

兔子的速度是 100,不能直接和乌龟的 20 比。

因为:

100 → 速度
20 → 时间

单位都不一样。


❌ 错误2:忘记兔子睡觉

兔子真正的总时间:

1000 / v + t2

而不是:

1000 / v


❌ 错误3:把公式写反

错误:

v / 1000

正确:

1000.0 / v

因为:

时间 = 路程 ÷ 速度


❌ 错误4:忘记平局

不能只写:

if (tt < t1)
rabbit
else
turtle

因为还有第三种可能:

tt == t1

所以应该:

if (tt < t1)
rabbit;
else if (tt > t1)
turtle;
else
tie;


十八、最后把这道题压缩成一句话

🐢 乌龟时间题目直接给,兔子时间用“1000÷速度+睡觉时间”算出来,然后谁的时间短谁获胜。

最后形成一个思维方式流程:

读题
↓
找变量
↓
找公式
↓
算出兔子时间
↓
if 比较
↙ ↓ ↘
兔赢 平局 龟赢

这道题的算法难度不高,真正考查的是孩子能不能把故事 → 数学公式 → C++变量 → if-else判断 → 格式化输出这一整条链路连接起来。


赞(0)
未经允许不得转载:网硕互联帮助中心 » GESP2026年9月认证C++一级( 第三部分编程题(1、新龟兔赛跑))精讲
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!