共48道题,当前是第17

初赛真题

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

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

该段代码是在在求解 $y$ 数组,其中 $y[i]$ 表示的是在这个序列中大于 $x[i]$ 的数字的个数。该段代码通过枚举判断的方法来枚举每个数对,从而计算出 $y$ 数组。需要注意的是,如果内层 for 循环从 $1$ 开始,那么每个数对都会被枚举两边,所以数组 $y$ 的每个元素都会变为原来的 $2$ 倍。'),

Question

1. 把第 12 ⾏与第 14 ⾏互换位置,结果不会改变。()

2. 第 13 ⾏把 if(x[i] < x[j]) 删掉效果⼀样。()

3. 数组 y[i] 中存的是 x[i] 在数列中从⼤到⼩的次序。()

4. 第 10 ⾏把 i + 1 改成 1 ,数组 y 每个元素的值增加 1 倍。()

5. 此程序如果 n 输⼊ 4 ,然后输⼊ 2 4 1 3 ,输出结果是( )。

6. 此程序的时间复杂度是( )