题库 模拟押题卷 题目列表 1 #include <stdio.h> 2 3&nbs...
组合题
1 #include <stdio.h>
2 
3 #define n 100000
4 #define N n+1
5 
6 int m;
7 int a[N], b[N], c[N], d[N];
8 int f[N], g[N];
9 
10 void init() 
11 {
12 f[1] = g[1] = 1;
13 for (int i = 2; i <= n; i++) {
14 if (!a[i]) {
15 b[m++] = i;
16 c[i] = 1, f[i] = 2;
17 d[i] = 1, g[i] = i + 1;
18 }
19 for (int j = 0; j < m && b[j] * i <= n; j++) {
20 int k = b[j];
21 a[i * k] = 1;
22 if (i % k == 0) {
23 c[i * k] = c[i] + 1;
24 f[i * k] = f[i] / c[i * k] * (c[i * k] + 1);
25 d[i * k] = d[i];
26 g[i * k] = g[i] * k + d[i];
27 break;
28 }
29 else {
30 c[i * k] = 1;
31 f[i * k] = 2 * f[i];
32 d[i * k] = g[i];
33 g[i * k] = g[i] * (k + 1);
34 }
35 }
36 }
37 }
38
39 int main() 
40 {
41 init();
42
43 int x;
44 scanf("%d", &x);
45 printf("%d %d\n", f[x], g[x]);
46 return 0;
47 }

假设输入的x是不超过1000的自然数,完成下面的判断题和单选题:

?判断题

1)若输入不为”1”,把第12行删去不会影响输出的结果。()

2)第24行f[i * k] = f[i] / c[i * k] * (c[i * k] + 1)中的” f[i]/c[i*k]”可能存在无法整除而

向下取整的情况。()

3)在执行完init()后,f数组不是单调递增的,但g数组是单调递增的。()

?单选题

4)init函数的时间复杂度为()。

5)在执行完init()后,f[1], f[2], f[3] ...... f[100]中有()个等于2。

6)当输入”1000”时,输出为()。

1.A.正确B.错误

2.A.正确B.错误

3.A.正确B.错误

4.

A.O(n)

B.O(n log n)

C.O(n √n)

D.O(n^2)

5.

A.23

B.24

C.25

D.26

6.

A.”15 1340”

B.”15 2340”

C.”16 2340”

D.”16 1340”

第一空(1.5分):__________________

第二空(2分):__________________

第三空(2分):__________________

第四空(3分):__________________

第五空(3分):__________________

第六空(4分):__________________

第 1 题 填空
第 2 题 填空
第 3 题 填空
第 4 题 填空
第 5 题 填空
第 6 题 填空
题目信息
阅读程序
-
正确率
0
评论
28
点击
QQ
微信