共48道题,当前是第21

初赛真题

01 #include <bits/stdc++.h>
02 using namespace std;
03 int t, x[100], a[100];
04 void work(int d, int i, int n) {
05     int k;
06     if (n == 1) {
07         for (k = 0; k < d; k++) printf("%3d", a[k]);
08         printf("\n");
09     } else
10         for (k = i; k < t; k++)
11             if (n % x[k] == 0) {
12                 a[d] = x[k];
13                 work(d + 1, k, n / x[k]);
14             }
15 }
16 int main() {
17     int i, k, n;
18     cin >> n;
19     for (i = n; i > 1; i--)
20         if (n % i == 0) x[t++] = i;
21     work(0, 0, n);
22 }

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

该段代码是在求解一个整数 $n$ 能被拆分成多少个形如 $n = n_1 * n_2 * ... * n_m$ 的式子,其中 $n_i > 1, m >= 1$ 。代码的思路是首先将 $n$ 当中除了 $1$ 的所有因数求出来,然后再通过暴力搜索的方式,依次枚举使用每一个因数并且划分为子问题,当 $n = 1$ 时输出答案


Question

1. 第 19 - 20 行 代码的作用是求出 n 的所有因数。( )

2. 该程序的作用是对 n 进行质因数分解

3. printf("%3d" ,a[k]); 中去掉 3 对程序没有影响

4. 去掉 if(n%x[k]==0) 对程序有影响

5. 如果输入为 2 ,那么输出为 ( )

6. 如果输入为 72 ,那么输出有多少非空行。( )