本题要求模拟报数过程:从 1 报到 N,但遇到 M 的倍数时要跳过不报。实际上就是让我们从小到大输出 1 到 N 之间所有不是 M 的倍数的整数。
输入:两个整数 N 和 M。
输出:所有满足 i % M != 0 的 i(1 ≤ i ≤ N),每个数占一行。
由于 N 最大仅为 1000,直接遍历判断即可轻松解决。
我们可以用一个循环变量 i 从 1 遍历到 N:
i % M != 0(即 i 不是 M 的倍数),则输出 i。i % M == 0,则跳过(什么都不做)。这个方法直接、高效,且不易出错。
for 循环,变量 i 从 1 开始,到 N 结束,每次增加 1。if (i % M != 0),成立就输出 i 并换行。题目给出了 C 语言的参考代码,我们稍作格式化并添加注释:
c1#include <stdio.h> 2 3int main() { 4 int n, m; 5 scanf("%d%d", &n, &m); // 输入 N 和 M 6 7 for (int i = 1; i <= n; i++) { 8 if (i % m != 0) // 如果 i 不是 m 的倍数 9 printf("%d\n", i); // 输出 i 10 } 11 12 return 0; 13}
代码说明:
scanf("%d%d", &n, &m):读取两个整数,中间可以用空格或换行分隔。i % m:计算 i 除以 m 的余数。若余数不为 0,说明 i 不是 m 的倍数,合法输出。scanf 使用 %d%d 时会自动跳过空白字符(包括换行),所以即使两个数写在同一行也不会出错。这是一道简单的模拟题,主要考察循环和取模运算的基础应用。只要理解“跳过 M 的倍数”等价于“输出非 M 的倍数”,就可以轻松写出代码。对于初学者,要注意 if 条件中不等于的写法 !=。