正在载入在线练习界面,本页内容可直接阅读…
AK CSP › CSP-J 2026 第一轮真题 › 第 19 题
CSP-J 2026 第一轮 第 19 题:程序(一):将第 7 行的 while (n 0)
题目
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int x = 1, y = 1;
while (n > 0) {
if (n % 2 == 0) {
++x;
} else {
++x;
++y;
}
n = n / 2;
}
cout << x << ' ' << y << endl;
return 0;
}
以下问题均假定输入的 $n$ 为不超过 $2^{31}- 1$ 的非负整数。本小题
将第 7 行的 while (n > 0) 改为 while (n >= 0) 后,程序可能出现的问题是( )。
选项
- A. 陷入死循环
- B. 输出结果比原来大
- C. 输出结果比原来小
- D. 输出结果不受影响
答案
A
题解
答案是 A. 陷入死循环。
关键在于循环中的这句: ``cpp n = n / 2; ` 整数除法会舍去小数部分,所以正整数 n 不断除以 2,最终会变成 0`。
- 原条件
n > 0:当n == 0时,条件不成立,循环结束。 - 改成
n >= 0:当n == 0时,条件仍然成立;而0 / 2还是0,因此循环一直无法结束,也就无法执行后面的输出语句。
如果一开始输入的就是 0,也会直接进入这种循环。
真题版权归 CCF 所有,本站仅用于非商业教学用途。页面加载后可直接在线作答,作答记录保存在本浏览器或账号中。 京ICP备2026056990号-1
京公网安备11010502062986号