共48道题,当前是第5

初赛真题

汉诺塔问题:古代有⼀个梵塔,塔内有三个座 A、B、C , A 座上有 $n$ 个盘⼦,盘⼦⼤⼩不等,⼤的在下,⼩的在上。有⼀个和尚想把这 $n$ 个盘⼦从 A 座移到 B 座,但每次只能允许移动⼀个盘⼦,并且在移动过程中, $3$ 个座上的盘⼦始终保持⼤盘在下,⼩盘在上,程序如下:

01 #include<iostream>
02 using namespace std;
03 void hanoi(int n, char a, char b, char c) {
04     if (n == 1)
05         cout << n << " " << a << " " << c << endl;
06     else {
07         hanoi(n - 1, a, c, b);
08         cout << n << " " << a << " " << c << endl;
09         hanoi(n - 1, b, a, c);
10     }
11 }
12 int main() {
13     int n;
14     cin >> n;
15     hanoi(n, 'A', 'B', 'C');
16     return 0;
17 }

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

⽤递归实现汉诺塔问题。

Question

1. 当 $n >= 0$ 时,程序不会出现死循环。( )

2. 输出共有 $2^n$ ⾏。( )

3. 当 n > 0 时,将第 4 ⾏ if (n == 1) 的 == 改为 <= ,程序输出结果必定不变。( )

4. 将第 5 ⾏ cout << n << " " << a << " " << c << endl; 的 n 改为 1 ,程序输出结果必定不变。( )

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

6. 若要求输出不超过 15 ⾏,则下列哪个 n 的值是合法的( ) 。

陈伦制作 版权所无 粤ICP备16127491号-1