B4355 [GESP202506 一级] 值日

· · 题解

欢迎报名洛谷网校,报名课程可以获得对应组别的知识点讲解与答疑服务,期待和大家一起进步!点击图片即可报名。

:::align{center} :::

小杨每 m 天值日一次,意味着他值日的天数一定是 m 的倍数,比如第 m 天,第 2 \times m 天,第 3 \times m 天,以此类推。同样,小红值日的天数也一定是 n 的倍数。他们要再次相遇在同一天值日,那么这一天必须同时是 m 的倍数和 n 的倍数。题目要求我们找出“至少多少天后”,也就是寻找满足这个条件的最小天数。这个数在数学上被称为 mn 的“最小公倍数”。

那么,我们如何找到这个最小公倍数呢?最直接、最容易理解的方法就是从小到大进行枚举。我们可以从第 1 天开始,依次检查第 2 天、第 3 天……对于每一天,我们都去判断它是否既能被 m 整除,又能被 n 整除。我们找到的第一个同时满足这两个条件的数字,就一定是最小的那个,也就是我们想要的答案。因为我们是从小到大顺序查找的,所以第一个找到的必然是最小值。

在编写 C++ 代码时,这个思路可以很方便地用一个循环来实现。我们可以设置一个循环,让一个变量(比如 i)从 1 开始不断地增加。在每一次循环中,我们都用取余运算符(%)来检查 i 是否能同时被 mn 整除。如果 i % m == 0 并且 i % n == 0 这两个条件同时成立,那么 i 就是我们寻找的答案。此时,我们就可以输出 i,然后结束程序。

参考代码:

___ (________) { // 设置一个不断增加的循环
    if (________) { // 判断条件是否成立
        ________; // 输出答案
        ________; // 跳出循环
    }
}