C++ 算法考级专栏
真题分析、矩阵探测、递归回溯与基础语法
🎨 视觉封面【浮点数运算与分支判断】GESP一级题解:luogu-B4573 [GESP202609 一级] 新龟兔赛跑
CCF GESP 2026年9月认证(第十五次认证)C++ 一级编程题第一题,洛谷 B4573。本题紧密围绕 CCF GESP 一级大纲核心考点,重点考察基础浮点数除法计算()、变量累加、多分支 if / else if / else 条件判断以及浮点数保留两位小数的格式化输出。题目贴合经典童话寓言背景,逻辑清晰,是检验编程启蒙阶段基本语法掌握度的优质试题。题目难度等级为入门(难度评级★☆☆☆☆)。
B4573 [GESP202609 一级] 新龟兔赛跑
🔗 洛谷原题传送门:luogu-B4573 [GESP202609 一级] 新龟兔赛跑
题目要求
题目描述
自从上次龟兔赛跑,兔子因为轻敌而惨败后,一直心有不甘,因此有了新一届龟兔赛跑。
乌龟和上次一样,将会以恒定的速度往终点爬行,题目将给出乌龟从起点到终点所需时间;
兔子并没有吸取教训,只是打算在终点前少睡一会儿,题目将给出兔子的速度,和兔子打算在终点前睡觉的时间;
起点和终点之间的距离固定为 ,请帮忙计算乌龟和兔子谁会获胜?
输入格式
输入包含 3 行,每行一个浮点数:
- 第 1 行的浮点数表示乌龟从起点到终点所需时间;
- 第 2 行的浮点数表示兔子的速度;
- 第 3 行的浮点数表示兔子打算在终点前睡觉的时间。
输出格式
输出包含 2 行:
- 第 1 行,如果乌龟获胜,输出
turtle;如果兔子获胜,输出rabbit;如果平局,输出tie; - 第 2 行,输出兔子到达终点所需的总时间(含兔子睡觉的时间),保留两位小数。
输入输出样例
样例输入 #1
20.0
100.0
11.0
样例输出 #1
turtle
21.00
样例输入 #2
20.0
100.0
9.0
样例输出 #2
rabbit
19.00
说明/提示
样例解释 1
兔子跑完全程所需时间是 ,而兔子要睡觉 单位时间,所以兔子一共需要 单位时间才能到达终点,这大于乌龟所需时间(),因此乌龟获胜。
样例解释 2
与样例 1 类似,兔子跑完全程所需时间是 ,但兔子仅睡觉 单位时间,所以兔子一共需要 单位时间就能到达终点,这小于乌龟所需时间(),因此兔子获胜。
数据范围
所有输入均有且仅有一位小数,且是不超过 的正数。
本题默认给出的数值均为龟兔世界中的标准单位,不需要进行任何单位换算。
题目分析与核心考点
1. 物理公式与总时间拆解
赛跑模型遵循经典运动学公式:
- 路程():题目明确固定为常量 ;
- 乌龟总时间():输入第 1 行直接给出,无需额外计算;
- 兔子总时间():由两部分组成:
- 纯奔跑时间:;
- 睡觉时间:(输入第 3 行给出)。 因此:
2. 胜负判定逻辑
赛跑胜负的准则是:谁用时少,谁先到达终点,谁获胜。
- 若 :乌龟用时更少,乌龟获胜,输出
turtle; - 若 :兔子用时更少,兔子获胜,输出
rabbit; - 若 :两者同时到达,平局,输出
tie。
3. C++ 格式化输出规范
根据输出要求,第 2 行必须输出兔子总耗时且保留两位小数。在 C++(严格遵循 GESP 考纲要求的 C++11 标准)中,推荐引入 <iomanip> 头文件:
#include <iomanip>
cout << fixed << setprecision(2) << rabbit_total_time << "\n";
fixed:指定浮点数以定点形式输出(避免极大或极小数退化为科学计数法);setprecision(2):精确锁定小数点后输出 2 位数字,自动执行四舍五入对齐。
完整参考代码 (C++11)
/**
* Problem: luogu-B4573 [GESP202609 一级] 新龟兔赛跑
* Standard: C++11 (CCF GESP 官方大纲推荐标准)
* Author: OneCoder
*/
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
// 基础流加速
ios::sync_with_stdio(false);
cin.tie(nullptr);
// 定义双精度浮点型变量,输入乌龟时间、兔子速度、兔子睡眠时间
double turtle_time = 0.0;
double rabbit_speed = 0.0;
double rabbit_sleep = 0.0;
if (!(cin >> turtle_time >> rabbit_speed >> rabbit_sleep)) {
return 0;
}
// 常量定义:全程固定距离 1000.0
const double DISTANCE = 1000.0;
// 1. 计算兔子纯奔跑时间与总耗时
double rabbit_run_time = DISTANCE / rabbit_speed;
double rabbit_total_time = rabbit_run_time + rabbit_sleep;
// 2. 第一行:判定胜负(时间短者获胜)
if (turtle_time < rabbit_total_time) {
cout << "turtle\n";
} else if (rabbit_total_time < turtle_time) {
cout << "rabbit\n";
} else {
cout << "tie\n";
}
// 3. 第二行:格式化输出兔子总耗时,保留两位小数
cout << fixed << setprecision(2) << rabbit_total_time << "\n";
return 0;
}
复杂度分析
- 时间复杂度:。程序只涉及常数次基本四则运算与多分支比较,耗时小于 ,瞬间完成。
- 空间复杂度:。只开辟了若干标量
double变量,内存消耗不足几字节,远低于题目给定的 限制。
考点归纳与避坑提醒
- 类型选用:输入含有一位小数,计算涉及除法,因此必须全部使用浮点型
double,切忌使用整型int截断小数部分导致精度丢失; - 胜负条件正反向:在赛跑比赛中,“数值更小”代表速度更快、成绩更好,切勿把条件写反成大于号;
- 平局特判:分支结构必须完整包含
turtle、rabbit和tie三种互斥状态,养成写完if和else if后补充else处理边界兜底的优秀编码习惯。
所有代码开源上传至 GitHub:yummy-code 仓库 · GESP 专题站:GESP WIKI
欢迎加入:C++ GESP/CSP 考级答疑群(688906745) 与 Java/Python交流群(982860385),点击可直接加群。
猜你想读 · 相关文章推荐
【单层循环累加与倍增递推】GESP一级题解:luogu-B4574 [GESP202609 一级] 棋盘上的奖赏
CCF GESP 2026年9月认证(第十五次认证)C++ 一级编程题第二题,洛谷 B4574。本题取材于数学史与计算机科学中极其著名的“国际象棋麦粒问题(Wheat and Chessboard Problem)”,全面考察了 CCF GESP 一级考纲中的核心考点——单层 for / while 循环结构、变量步进...
【GESP】C++ 一级真题解析,[2025年12月,第十二次认证]第一题小杨的爱心快递
GESP C++ 2025年12月,一级真题第一题,考察循环语句应用,涉及到基础语句,相对比较简单。题目难度⭐☆☆☆☆。
【GESP】C++ 一级真题解析,[2025年12月,第十二次认证]第二题手机电量显示
GESP C++ 2025年12月,一级真题第二题,考察分支语句应用,涉及到基础语句,比较简单。题目难度⭐☆☆☆☆。
OneCoder (lihongzheshuai)
一个中年人的自留地,记录学习 C++、GESP/NOI、Java、Python 与算法架构的心得体会。本站唯一网址:coderli.com