普及组CSP-J初赛程序阅读训练01
该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。
01 #include <bits/stdc++.h>
02 using namespace std;
03
04 using i64 = long long;
05
06 int popcount(i64 x)
07 {
08 int res = 0;
09 while(x)
10 {
11 if(x & 1 == 1)
12 res++;
13 x >>= 1;
14 }
15 return res;
16 }
17
18 int calc(i64 x)
19 {
20 int sum = 0;
21 for(i64 i = 1; i <= x; i++)
22 sum += popcount(i);
23 return sum;
24 }
25
26 int sum(i64 l, i64 r)
27 {
28 return calc(r) - calc(l);
29 }
30
31 int main()
32 {
33 i64 l, r;
34 cin >> l >> r;
35 cout << calc(l) << ' ' << sum(l, r) << endl;
36 return 0;
37 }
第 1 题
若程序输入为 5 8,则程序输出 7 6。
{{ select(1) }}
- 正确
- 错误
第 2 题
若将第 11 行中的 & 符号改为 ^ 符号,程序输出结果一定不会改变。
{{ select(2) }}
- 正确
- 错误
第 3 题
若将头文件 #include <bits/stdc++.h> 改成 #include <stdio.h>,程序仍能正常运行。
{{ select(3) }}
- 正确
- 错误
第 4 题
若输入为 1 12,则输出是什么?
{{ select(4) }}
- 1 21
- 1 20
- 1 22
- 2 22
第 5 题
程序中的 sum 函数实现了什么功能?
{{ select(5) }}
- 计算了 [l, r] 区间内的每个数二进制位上 1 的个数之和
- 计算了 [l, r] 区间内的每个数二进制位上 0 的个数之和
- 计算了 (l, r) 区间内的每个数二进制位上 1 的个数之和
- 计算了 (l, r) 区间内的每个数二进制位上 0 的个数之和
