共48道题,当前是第44

初赛真题

01 #include<cstdio>
02 
03 using namespace std;
04 int findvall(int n) {
05     int f;
06     if (n == 0) return 1;
07     else {
08         f = findvall(n / 2);
09     }
10     return (n * f);
11 }
12 int main() {
13     int n;
14     scanf("%d", &n);
15     printf("%d\n", findvall(n));
16     return 0;
17 }

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

代码比较简单,实际上就是对一个数不断除 $2$ ,然后将这个过程中得到的数字乘起来。需要注意的一点是对于负数来说,仍然是可以通过除 $2$ 来除到 $0$ 的 ,所以该程序可以处理负数。'),

Question

1. 如果输入的 n 是负数的话,该程序会出现死循环,所以该程序不能求解 n 是负数的情况。( )

2. 第 6 行输出 if(n == 0) 改成 if(n == 1) 时,对于输入的正整数 n ,输出结果不会改变。( )

3. 对于输入的正整数程序输出的值小于等于 n 。( )

4. 如果多次运行该程序,并且输入的 n是单调递增的正整数,那么每次输出的结果也是一个严格单调递增的数列。( )

5. 若两次输入 n 的值相差 1 ,但输出的结果却是一个正数,一个负数,那么两次输入的 n 可能是下面四组中的 ( )

6. 此程序的时间复杂度是 ( )