【GESP】C++一级真题 luogu-B4257 [GESP202503 一级] 图书馆里的老鼠
GESP C++一级真题,整数除法运算,难度★☆☆☆☆。
luogu-B4257 [GESP202503 一级] 图书馆里的老鼠
题目要求
题目描述
图书馆里有 $n$ 本书,不幸的是,还混入了一只老鼠,老鼠每 $x$ 小时能啃光一本书,假设老鼠在啃光一本书之前,不会啃另一本。请问 $y$ 小时后图书馆里还剩下多少本完整的书。
输入格式
三行,第一行一个正整数 $n$,表示图书馆里书的数量;
第二行,一个正整数 $x$,表示老鼠啃光一本书需要的时间;
第三行,一个正整数 $y$,表示经过的总时间;
输入数据保证 $y$ 小时后至少会剩下一本完整的书。
输出格式
一行,一个整数,表示 $y$ 小时后图书馆里还剩下多少本完整的书。
输入输出样例 #1
输入 #1
1
2
3
10
2
3
输出 #1
1
8
输入输出样例 #2
输入 #2
1
2
3
5
2
4
输出 #2
1
3
说明/提示
对于所有测试点,保证 $1\leq n,x,y\leq 1000$,保证 $y$ 小时后至少会剩下⼀本完整的书。
题目分析
解题思路
本题的解题思路如下:
- 问题分析:
- 给定图书馆里的书本数量n、老鼠啃完一本书需要的时间x和经过的总时间y
- 需要计算y小时后剩余的完整书本数量
- 老鼠在啃完一本书之前不会啃另一本书
解题方法:
方法一:通过逻辑判断是否整除
- 核心思路:
- 用总时间y除以啃一本书的时间x,得到已经被啃完的书的数量
- 如果y能被x整除,说明最后一本书已经被啃完
- 如果y不能被x整除,说明最后一本书正在被啃,也要算作不完整
- 实现公式:
- 能整除时:剩余数量 = n - y/x
- 不能整除时:剩余数量 = n - y/x - 1
方法二:利用向上取整公式
- 核心思路:
- 使用向上取整计算已经不完整的书的数量
- 总时间除以单本时间向上取整,就是不完整的书的数量
- 实现公式:
- 剩余数量 = n - ⌈y/x⌉
- 其中⌈y/x⌉可以用(y + x - 1)/x实现
方法三:使用cmath库的ceil函数
- 核心思路:
- 直接使用C++标准库中的ceil函数进行向上取整
- 将除法结果转换为double类型以确保精确计算
- 实现公式:
- 剩余数量 = n - ceil(y/x)
- 需要将y转换为double类型避免整数除法
- 核心思路:
- 实现要点:
- 注意输入数据的范围:1 ≤ n,x,y ≤ 1000
- 题目保证y小时后至少会剩下一本完整的书
- 整数除法运算时注意处理向上取整的情况
复杂度分析:
- 时间复杂度:$O(1)$,只需要简单的算术运算
- 空间复杂度:$O(1)$,只需要存储几个整型变量
方法一:通过逻辑判断是否整除
方法一示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
int main() {
// 定义变量存储书的数量、啃一本书所需时间和总时间
int n, x, y;
// 从标准输入读取三个整数
std::cin >> n >> x >> y;
// 计算剩余完整的书的数量
// 如果总时间能被啃一本书的时间整除,说明最后一本书已经被啃完
if (y % x == 0) {
std::cout << n - y / x;
}
// 如果不能整除,说明最后一本书正在被啃,也要算作不完整
else {
std::cout << n - y / x - 1;
}
return 0;
}
方法二:利用公式计算
方法二示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
int main() {
// 定义变量存储书的数量(n)、啃一本书所需时间(x)和总时间(y)
int n, x, y;
// 从标准输入读取三个整数
std::cin >> n >> x >> y;
// 计算剩余完整的书的数量
// 公式:总数 - 向上取整(总时间/单本时间)
// (x + y - 1) / x 等价于 ceil(y/x),用于向上取整
std::cout << n - (x + y - 1) / x;
return 0;
}
方法三:利用ceil函数
方法三示例代码
1
2
3
4
5
6
7
8
9
#include <iostream>#include <iostream>
#include <cmath>
int main() {
int n, x, y;
std::cin >> n >> x >> y;
std::cout << n - std::ceil((double)y / x);
return 0;
}
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
GESP各级别考纲要点、知识拓展和练习题目清单详见C++学习项目主页
“luogu-”系列题目已加入洛谷Java、C++初学团队,作业清单,可在线评测,团队名额有限,欢迎加入。
“bcqm-”系列题目可在编程启蒙题库进行在线评测。
本文由作者按照 CC BY 4.0 进行授权