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

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

CSP-J 2026 第一轮 第 18 题:程序(一):假设输入为非负整数,则程序输出的第一个数一定不小于第二个数

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

题目

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

本小题

假设输入为非负整数,则程序输出的第一个数一定不小于第二个数。( )

选项

  • √. 正确
  • ×. 错误

答案

√

题解

答案:√ 正确。

初始时,x = y = 1。每次循环:

  • 如果 n 是偶数,只给 x 加 1,x 与 y 的差增加 1。
  • 如果 n 是奇数,x、y 同时加 1,两者的差不变。

因此,x - y 从 0 开始,只会增加或保持不变,始终有 x ≥ y。

特别地,输入 n = 0 时不进入循环,输出 1 1,也符合条件。

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