历年CSP-J初赛真题解析 | 2021年CSP-J初赛阅读程序(16-21)

学习C++从娃娃抓起!记录下CSP-J备考学习过程中的题目,记录每一个瞬间。

附上汇总贴:历年CSP-J初赛真题解析 | 汇总_热爱编程的通信人的博客-CSDN博客


#include <iostream>
using namespace std;

int n;
int a[1000];

int f(int x)  //统计x转为二进制后1的个数
{
    int ret = 0;
    for (; x; x &= x - 1) ret++;
    return ret;
}

int g(int x)  //获取x转为二进制后1的最低位
{
    return x & -x;
}

int main()
{
    cin >> n;
    for (int i = 0; i < n; i++) cin >> a[i];
    for (int i = 0; i < n; i++)
        cout << f(a[i]) + g(a[i]) << ' ';
    cout << endl;
    return 0;
}

16、输入的n等于1001时,程序不会发生下标越界。( )

【答案】:错

【解析】

a[1000]的下标范围为a[0] - a[999],所以a[1000]会导致越界

17、输入的a[i]必须全为正整数,否则程序将陷入死循环。( )

【答案】:错

【解析】

尝试将一个负数带入运算,f函数的二进制运算逻辑没有发生变化,也不会陷入死循环。另外第21题就有负数输入

18、当输入为“5 2 11 9 16 10”时,输出为“3 4 3 17 5”。( )

【答案】:错

【解析】

输入数据后逐个计算,输出为3 4 3 17 4

19、当输入为“1 511998”时,输出为“18”。( )

【答案】:对

【解析】

511998转为二进制后为01111100111111111110,计算的结果为18,所以是对的

20、将源代码中g函数的定义(14-17行)移到main函数的后面,程序可以正常编译运行。( )

【答案】:错

【解析】

运行main函数时,如果g函数未被声明,是无法调用的

21、当输入为“2 -65536 2147483647”时,输出为( )。

A.“65532 33”

B.“65552 32”

C.“65535 34”

D.“65554 33”

【答案】:B

【解析】

2147483647换算为二进制后,是2^32-1,即有31个1,所以输出为32,选B

猜你喜欢

转载自blog.csdn.net/guolianggsta/article/details/132739222