题解:洛谷 B4257 图书馆里的老鼠

【题目来源】

洛谷:B4257 [GESP202503 一级] 图书馆里的老鼠 - 洛谷(luogu.com.cn)

【题目描述】

图书馆里有 \(n\) 本书,不幸的是,还混入了一只老鼠,老鼠每 \(x\) 小时能啃光一本书,假设老鼠在啃光一本书之前,不会啃另一本。请问 \(y\) 小时后图书馆里还剩下多少本完整的书。

【输入】

三行,第一行一个正整数 \(n\),表示图书馆里书的数量;

第二行,一个正整数 \(x\),表示老鼠啃光一本书需要的时间;

第三行,一个正整数 \(y\),表示经过的总时间;

输入数据保证 \(y\) 小时后至少会剩下一本完整的书。

【输出】

一行,一个整数,表示 \(y\) 小时后图书馆里还剩下多少本完整的书。

【输入样例】

10
2
3

【输出样例】

8

【核心思想】

  1. 问题分析:图书馆有 \(n\) 本书,老鼠每 \(x\) 小时啃光一本书,\(y\) 小时后求剩余完整书的数量。这是一个整数除法与余数问题,核心在于计算 \(y\) 小时内老鼠能完整啃完多少本书。

  2. 算法选择

    • 整数除法\(y / x\) 得到完整啃完的书数,余数判断是否有正在啃的书
  3. 关键步骤

    • 读入数据:读取 \(n, x, y\)
    • 计算被啃书数
      • \(y \bmod x = 0\):老鼠刚好啃完 \(y/x\) 本书,正在啃第 \(y/x + 1\) 本但尚未啃完,剩余 \(n - y/x\)
      • \(y \bmod x \neq 0\):老鼠正在啃第 \(\lfloor y/x \rfloor + 1\) 本书且已啃了一部分,这本书不完整,剩余 \(n - \lfloor y/x \rfloor - 1\)
    • 输出结果:剩余书数
  4. 时间/空间复杂度

    • 时间复杂度:\(O(1)\)
    • 空间复杂度:\(O(1)\)
  5. 整数除法的核心思想

    • 完整周期与余数分析\(y\) 小时内包含 \(\lfloor y/x \rfloor\) 个完整的 \(x\) 小时周期,老鼠能完整啃完 \(\lfloor y/x \rfloor\) 本书。余数 \(y \bmod x\) 决定当前是否正在啃下一本书
    • 边界条件处理:当 \(y\) 恰好是 \(x\) 的倍数时,老鼠刚好完成一本书的啃食,即将开始下一本但尚未动手,因此这本不算被啃;有余数时,当前这本正在被啃,不算完整
    • 题目保证的简化:题目保证至少剩一本书,无需处理 \(n\) 不足的特殊情况
    • 适用于周期事件计数、整数除法取整类基础问题

【算法标签】

入门 #数学

【代码详解】

#include <bits/stdc++.h>
using namespace std;

int n, x, y;  // n: 总数,x: 每个单位的大小,y: 目标总量

int main() {
    cin >> n >> x >> y;  // 输入n, x, y

    if (y % x == 0) {  // 如果y能被x整除
        cout << n - y / x << endl;  // 输出剩余的数量
    } else {  // 如果y不能被x整除
        cout << n - y / x - 1 << endl;  // 输出剩余的数量减1
    }

    return 0;
}

【运行结果】

10
2
3
8
posted @ 2026-07-16 16:16  团爸讲算法  阅读(18)  评论(0)    收藏  举报