共48道题,当前是第15

初赛真题

01 #include<iostream>
02 #include<cstdio>
03 using namespace std;
04 int j, i, m;
05 int a[10];
06 int main() {
07     for (i = 2; i <= 6; i++)
08         a[i] = i + 1;
09     do {
10         m = 2;
11         for (i = 3; i <= 6; i++)
12             if (a[m] > a[i]) m = i;
13                 a[m] = a[m] + m;
14         m = 1;
15         for (i = 2; i <= 5; i++)
16             for (j = i + 1; j <= 6; j++)
17                 if (a[i] < a[j]) m = 0;
18     } while (m == 0);
19     printf("%d", a[2]);
20     return 0;
21 }

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

这段代码没有实际的特殊含义,建议直接按照代码模拟即可。在题目中需要注意的是,最终的输出保证的是 a[i] >= a[i+1] ,而且一般我们认为,只要满足了这个条件就可以说是序列是从大到小排序的,即便序列中的值全部相同也认为是从大到小排好序的。

Question

1. 程序结束时,a[2] 的值一定是数组 a 中的最大值。( )

2. 第 18 行 m==0 成立时,数组 $a[i] (2 <= i <= 6)$ 从大到小排序

3. 程序输出时,a 数组满足:对任意的 $2 <= i < 6$ ,有 a[i] > a[i+1]

4. 删除第 14 行代码 m=1 程序结果会发生改变

5. 程序的输出结果为( )

6. 第 17 行 if (a[i] < a[j]) 执行了多少次( )