共48道题,当前是第37

初赛真题

01 #include<cstdio>
02 #define MAX_N 20
03 #define ll long long
04 using namespace std;
05 int n;
06 long long f[MAX_N][MAX_N];
07 int main() {
08     scanf("%d", &n);
09     for (int i = 0; i <= n; i++) {
10         f[0][i] = 1;
11     }
12     for (int i = 1; i <= n; i++) {
13         for (int j = i; j <= n; j++) {
14             if (i == j) f[i][j] = f[i - 1][j];
15             else f[i][j] = f[i][j - 1] + f[i - 1][j];
16         }
17     }
18     cout << f[n][n] << endl;
19     return 0;
20 }

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

该段代码是在进行 f[i][j] 数组的递推,我们不用去在意该数组的具体含义,只需要知道其递推方程,按照递推方程来模拟计算即可。其对 f[i][j] 数组的递推可以看作是在一个矩阵中进行计算,这个矩阵的第一行均为 $0$ ,对角线上的值等一上一行的值,对于其他所有的元素都等于左侧和上侧的元素和。需要注意的一点时,该段代码尽在第一行初始时给下标为 $0$ 的位置进行了赋值,接下来的更新都不会涉及到给下标为 $0$ 的位置的赋值。

Question

1. 如果第 3 行 #define ll long long 的代码缺失,程序会出现编译错误( )

2. 本程序中 f 数组内被改变过的元素的值与 n 无关,即对于不同的 n , f 数组中不为 0 的元素值都对应相同( )

3. 若 n = 10,对于任何 $0 <= i <= n$ , f[0][i]=1 ( )

4. 若 n = 10,对于任何 $0 <= i <= n$ , f[1][i]=1 ( )

5. 本程序没有使用的基本算法是( )

6. 对于输入 6 ,本程序输出( )