#12428. 珅泽教育CSP-J第一轮模拟考第二十八套 第 18 题

珅泽教育CSP-J第一轮模拟考第二十八套 第 18 题

二、阅读程序(判断题请选择“正确”或“错误”,共 18 题、40 分)

阅读程序(1)

输入的 num[i] 均为正整数。

#include <iostream>
using namespace std;

int num[10000];

int g(int a) {
    int ans = 0, m = 0;
    while(a){
        if((a & 1) == 0)
            ans |= 1 << m;
        m++;
        a >>= 1;
    }
    return ans;
}

int main() {
    int n, res = 0;
    cin >> n;
    for(int i = 0; i < n; i++) cin >> num[i];
    for(int i = 0; i < n; i++) num[i] = g(num[i]);
    for(int i = 0; i < 31; i++) {
        int k = 0;
        for (int j = 0; j < n; j++) {
            if ((num[j] >> i) & 1 == 1) k++;
        }
        res += k * (n - k);
    }
    cout << res;
    return 0;
}

程序执行完第 21 行后,数组内的元素都会变小。( )

{{ select(1) }}

  • 正确
  • 错误