如果一个正整数能被 $3$ 整除,或者某一位能被 $3$ 整除,则称之为“漂亮数”。下面的 C++ 代码用于判断正整数 $N$ 是否为漂亮数,L1 行的横线处应该填入的代码是( )。
int N, Flag;
cin >> N;
Flag = 0; // "非漂亮数"
if (N % 3 == 0)
Flag = 1; // "漂亮数"
else
while (N != 0){
if (_____________){ // L1
Flag = 1;
break;
}
N /= 10;
}
cout << (Flag? "漂亮数" : "非漂亮数");答案D。先分析已有代码的功能,确定输出目标,再反推横线处需要的代码。可用代入法验证。
将每个选项代入横线处验证是最可靠的方法。注意代码的完整逻辑和输出格式。
【考点】取模运算|循环结构|数字位处理
解题思维:先判断 N 整体能被3整除(N%3==0),若成立直接标记为漂亮数。否则进入循环逐位处理:N%10 取出当前个位数字,再对3取模判断该位是否为3的倍数。循环体末尾 N/=10 去掉已处理位,直到 N 为0。横线处必须同时完成两个操作:取出个位(N%10)并判断其被3整除(%3==0),因此 D 选项 N%10%3==0 是唯一正确组合。
陷阱拆解:
N%10==0 误将"个位是否为0"当作"个位能否被3整除",完全偏离题意。N%3%10==0 先整体整除3再取10,逻辑混乱且永远为0。N%10%3 缺少等号,表达式值非0/1,无法作为布尔条件触发 Flag 赋值。反命题思维:命题人故意用"整体整除"与"某位整除"两个并列条件,考察对取模运算的连续性与循环逐位处理的掌握。若将 N%3 改为 N%5,或将条件改为"某位是奇数",只需替换相应取模与比较对象,循环结构完全复用。
总之,遇到此类题先拆解题意:整体条件→循环逐位→位操作组合,再代入选项验证语法与逻辑。