共63道题,当前是第52

Description

1	#include <iostream>
2	using namespace std;
3	int n, a[1000];
4	void check(int& a, int& b) {
5	    if (a > b) {
6	        int t = a;
7	        a = b;
8	        b = t;
9	    }
10	}
11	int main() {
12	    cin >> n;
13	    a[1] = n/2+1;
14	    for (int i = 2; i <= n; i++)
15	        a[i] = (a[i-1] * 5 - 2) % n + 1;
16	    for (int i = 2; i <= n; i++)
17	        check(a[1], a[i]);
18	    for (int i = 3; i <= n; i++)
19	        check(a[2], a[i]);
20	    cout << a[1] << endl;
21	    cout << a[2] << endl;
22	    return 0;
23	}

1. 正确。解析:当 $n=1000$ 时,会使用到下标为 $1000$ 的数组元素 $a[1000]$,而数组的元素下标从 $0$ 到 $999$,所以会发生数组越界。
2. 错误。解析:解决本题最简单的办法就是找一个“反例”,可以发现,当 $n=3$ 时,$a[1]=2,a[2]=3,a[3]=2$,并不是一个 $1 \sim n$ 的排列。
3. 正确。解析:输入为 $5$ 时,输出的第一行为 $3$。
4. 错误。解析:输入为 $7$ 时,输出的第一行为 $1$。
5. D。解析:该程序的目的是将 $n$ 个数的最小值交换到 $a[1]$,将第二小的值交换到 $a[2]$,其中可能存在多个数的值均为最小值的情况,此时 $a[1]==a[2]$,如果数字都不相同则第一个数字小于第二个数字,所以答案是不确定
6. C。解析:当 $n=20$ 时,$a$ 数组中的 $20$ 个元素分别为 $11,14,9,4,19,14,9,4,19,14,9,4,19,14,9,4,19,14,9,4$,其中次小值为 $4$。 

Question

当输入为 $1000$ 时,程序会发生数组越界。( )

对于任意输入的 $n$, $a[1]$ 到 $a[n]$ 是一个 $1$ 到 $n$ 的排列。( )

当输入为 $5$ 时,输出的第一行为 $3$。( )

当输入为 $10$ 时,输出的第一行为 $7$。( )

当 $n>1$ 时,输出的第一行的数字和输出的第二行的数字之间的关系( )

当输入为 $20$ 时,输出的第二行数字为( )。