测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看
B22

案例:买书、休息时间、考试星期

引入

章前总览 三道真题都围着 /%:买几本剩多少;秒数换成时分秒;星期循环用取余。

三道案例:

  • 买书:本数 = m/13,剩余 = m%13
  • 休息:先合成总秒,再拆回时分秒
  • 星期:(x+n-1)%7+1

1 案例1:小杨买书

书单价 13 元,输入零用钱 m,输出最多买几本、还剩多少。

</> 参考代码

#include <iostream>
using namespace std;

int main() {
    int m;
    cin >> m;
    cout << m / 13 << endl;  // 本数(整数商)
    cout << m % 13 << endl;  // 剩余
    return 0;
}
  • 样例:100 → 7 本剩 9;199 → 15 本剩 4。

2 案例2:休息时间

输入开始时 h、分 m、秒 s,再输入学习秒数 k,输出休息时刻。

思路

  • 先变成总秒:z = h*3600 + m*60 + s,再 z += k
  • 再拆开:时 z/3600,然后 z %= 3600;分 z/60,再 z %= 60 得到秒。

</> 参考代码

#include <iostream>
using namespace std;

int main() {
    int h, m, s, k;
    cin >> h >> m >> s;
    cin >> k;
    int z = h * 3600 + m * 60 + s;
    z += k;
    int hh = z / 3600;
    z %= 3600;
    int mm = z / 60;
    z %= 60;
    cout << hh << " " << mm << " " << z << endl;
    return 0;
}
  • 样例:12 59 59 再加 10 秒 → 13 0 9。

3 案例3:考试是星期几

今天星期 x(1~7,7=周日),n 天后是星期几?

为什么是 (x+n-1)%7+1

  • 直接 (x+n)%7 会得到 0~6,0 要当成 7。
  • 公式 (x+n-1)%7+1 把结果稳定映射到 1~7。

</> 参考代码

#include <iostream>
using namespace std;

int main() {
    int x, n;
    cin >> x >> n;
    cout << (x + n - 1) % 7 + 1 << endl;
    return 0;
}
  • 样例:今天 1,过 6 天 → 7;今天 5,过 1 天 → 6。
小结

三道题的共同武器:

/  取整段(本数、小时、星期循环前的整圈)
%  取零头(剩余钱、剩余秒、星期落点)
里程碑达成:

下一节再练购物、两时刻差、1~n 中 3 的倍数个数。