- 陈泽文 的博客
8-21总结
- @ 2024-8-21 21:17:02
今天做了一张模拟卷
错了几道题
1:有一个n行m列的网格图,每个格子有一个非负整数权值a[i][j]。现在要从右上角 (1, m) 走到左下角 (n, 1),只能向左或向下走,每次走一格,路径上的权值和为路径上所有格子的权值和。以下哪个递推式可以求解从右上角到左下角的最小权值和?()。
A:f(i, j) = min(f(i-1, j), f(i, j-1)) + a[i][j]
B:f(i, j) = max(f(i-1, j), f(i, j-1)) + a[i][j]
C:f(i, j) = min(f(i-1, j), f(i, j+1)) + a[i][j]
D:f(i, j) = max(f(i-1, j), f(i, j+1)) + a[i][j]
因为要求最小值,所以排除B和D。然后因为只能往左或往下走一步,所以要到a[i][j]号格子只能从它的上面或右边过来
2:

4)当输入的 n 为 100 时,输出的最大值为 50×50×31。( )
A. 正确
B. 错误
100个数中最多有50个1和50个0,然后因为按位取反之后首位也会取反所以会少一位,也就是30位。
单选题: 5)如果输入是:
4
8 6 4 3
则输出是: A. 14
B. 12
C. 10
D. 0
输入的数据为8 6 4 3也就是二进制下的1000 110 100 11。通过g函数按位取反后是0111 001 011 0带入主函数中的每位上0和1的乘积的和是10
3:

3)如果将第10行代码中的i >= 1修改为 i > 1,一定只输出一行。
A. 正确
B. 错误
因为i>1的话,x=1的递归调用就进不去循环,不能进行递归调用
5)输入 5,输出的第 115行是( )。
A. 5 3 2 4 1
B. 5 3 4 2 1
C. 5 4 2 3 1
D. 5 2 4 3 1
6)输入 6,输出的第 365行是( )。
A. 2 6 1 3 4 5
B. 3 4 6 1 2 5
C. 3 1 6 5 2 4
D. 2 1 4 3 5 6
4:

1.①处应填 ( )
A. a[j] *= p
B. a[j] *= q
C. a[j] *= pow(p, i)
D. a[j] *= pow(q, i)
这里是要
- ②处应填 ( )
A. a[j] += a[j - 1] / q
B. a[j + 1] += a[j] / q
C. if (j) a[j] += a[j - 1] / q
D. if (j) a[j + 1] += a[j] / q
到这里已经把每一位p进制转换成了对应的10进制。因为有可能有超过10的数,所以要考虑进位。第i位等于第i-1位的进位加上原本的值。因为是从零开始的,所以排除A,C和D。
- ③处应填 ( )
A. if (j) a[j - 1] /= q
B. if (j) a[j - 1] %= q
C. if (j) a[j] %= q
D. a[j] %= q
进位完了,要把个位数留下,也就是%10。因为是从0开始的,所以A,B,C都要排除。
- ④处应填 ( )
A. a[len]
B. a[len] / q
C. a[len - 1]
D. a[len - 1] / q
这段代码要实现10进制转q进制。所以它的条件是a[len]!=0,也就是a[len]。
- ⑤处应填 ( )
A. a[len] += a[len - 1] % q
B. a[len] += a[len - 1] / q
C. a[len + 1] += a[len] % q
D. a[len + 1] += a[len] / q
这里是算进位的。因为是从0开始,所以排除A跟B。然后,因为进位要取十位而不是个位,所以是D。