题解
3的倍数
1 条题解
-
0
P4856 3的倍数(入门)
解题思路
第一步,理解题意。 小童输入一串整数,最后一个数字是 -1,表示输入结束。我们要从这串数字里找出所有能被 3 整除的数,按输入的顺序输出,用空格分隔。-1 是停止信号,不算数字。
第二步,判断倍数的方法。 判断一个数 x 能不能被 3 整除,最简单的办法是看余数:x % 3 如果等于 0,说明能整除,x 就是 3 的倍数。取余运算 % 是判断倍数的万能钥匙。
第三步,边读边判断。 这道题不需要先存起来再处理,因为读到什么就可以直接判断什么,整个过程只读一遍就完成了,非常高效。用一个死循环读 x:如果 x 等于 -1 就 break 停止;否则判断 x % 3 == 0,成立就输出 x。
第四步,控制空格。 输出多个数字时,数字之间要用空格隔开,但最后一个数字后面不能有多余空格。用一个变量 first 表示"是不是第一次输出":第一次输出时前面不加空格,之后每次输出前先加一个空格,这样输出的格式就是整齐的"数字 数字 数字"。
第五步,边界情况。 负数也可能是 3 的倍数,比如 -3、-6,它们除以 3 的余数也是 0,照常输出;如果整串数字里一个 3 的倍数都没有,就只输出一个换行符。举个例子:输入 1 2 3 4 5 6 7 8 9 -1,能被 3 整除的是 3、6、9,输出"3 6 9",和样例一致。再比如输入 6 3 8 9 -1,能被 3 整除的是 6、3、9,输出"6 3 9"。
参考代码
// 3的倍数:输入数字直到-1,输出能整除3的数字 #include <iostream> using namespace std; int main() { int x; int first = 1; // 控制空格 while (true) { cin >> x; if (x == -1) break; // 遇到-1停止输入 if (x % 3 == 0) { // 是3的倍数就输出 if (!first) cout << ' '; cout << x; first = 0; } } cout << endl; return 0; }复杂度分析
时间复杂度:每个数字读入后只判断一次,所以是 O(cnt),其中 cnt 是输入数字的个数。
空间复杂度:只需要几个变量(x 和 first),不随数字个数增加,是 O(1)。
- 1