正在载入在线练习界面,本页内容可直接阅读…

AK CSP › CSP-J 2026 第一轮真题 › 第 17 题

CSP-J 2026 第一轮 第 17 题:程序(一):将第 11 行的 ++x; 删除后,程序输出的两个数一定相等

阅读程序 · 枚举与模拟 · 答案 ×

题目

#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$ 的非负整数。

本小题

将第 11 行的 ++x; 删除后,程序输出的两个数一定相等。( )

选项

  • √. 正确
  • ×. 错误

答案

×

题解

选 ×,错误。

删除第 11 行(else 中)的 ++x; 后:

  • n 为偶数时,只给 x 加 1。
  • n 为奇数时,只给 y 加 1。

两种情况出现的次数不一定相同,所以 x 和 y 不一定相等。

例如输入 n = 1:

  1. 初始 x = 1,y = 1。
  2. n 是奇数,执行 ++y,得到 x = 1,y = 2。
  3. n = 1 / 2 = 0,循环结束。

输出为 1 2,两个数不相等,因此判断为错误。

真题版权归 CCF 所有,本站仅用于非商业教学用途。页面加载后可直接在线作答,作答记录保存在本浏览器或账号中。 京ICP备2026056990号-1 京公网安备11010502062986号