共48道题,当前是第14

初赛真题

01 #include<iostream>
02 #include<cstdio>
03 using namespace std;
04 int n, i, x;
05 int d[11];
06 int main() {
07     cin >> n;
08     for (i = 1; i <= n; i++) {
09         cin >> x;
10         d[x] = d[x] + 1;
11     }
12     d[0] = 0;
13     for (i = 1; i <= 10; i++)
14         d[i] = d[i - 1] + d[i];
15     for (i = 1; i <= 10; i++)
16         if (d[i] != d[i - 1])
17             printf("%3d:%4d ", i, d[i - 1] + 1);
18     return 0;
19 }

1. B。
2. A。
3. B。
4. B。
5. B。
6. C。

这段代码实际上是在通过桶计数的方式来判断每一个数字的排名。 $x$ 的排名就是所有小于 $x$ 的数字的个数加一,所以代码中我们对桶做前缀和,当发现某一个桶内有数字时 (d[i] != d[i-1]) 就可以输出所有小于该数字的桶的数字和加一。

Question

1. 输入的 x 值应在 [0, n - 1] 的范围内。

2. 把第 10 行改成 d[x]++ ,不影响程序运行结果。( )

3. 对任意在 [1,9] 之间的数 i,都有 d[i-1] < d[i] < d[i+1] 。( )

4. 把第 16 行改成 if(d[i] > d[i-1]) ,程序运行的结果会发生改变。( )

5. 输人 n = 9 后,接着输入: 1 3 4 5 2 4 3 5 2 后,程序输出结果为( )

6. 把程序第 17 行改成 print("%3d" ,i); 后,输入 n = 10 后输入: 1 3 4 1 5 4 4 3 5 1 后,程序输出结果为( )