c++实现汉诺塔基本解打印,要求能够输入汉诺塔层数(1-10),起始柱(A-C),和目标柱(A-C)。同时对每个解前方打印编号,每个解一个编号,不同的解编号不同。顺序向下。
时间: 2023-09-11 12:05:37 浏览: 52
### 回答1:
以下是实现汉诺塔基本解打印的C++代码:
```c++
#include <iostream>
#include <string>
using namespace std;
void hanoi(int n, char start, char end, char middle, int& count) {
if (n == 1) {
count++;
cout << count << ". Move disk 1 from " << start << " to " << end << endl;
return;
}
hanoi(n - 1, start, middle, end, count);
count++;
cout << count << ". Move disk " << n << " from " << start << " to " << end << endl;
hanoi(n - 1, middle, end, start, count);
}
int main() {
int n, count = 0;
char start, end;
cout << "Enter the number of disks (1-10): ";
cin >> n;
cout << "Enter the starting peg (A-C): ";
cin >> start;
cout << "Enter the ending peg (A-C): ";
cin >> end;
cout << endl << "Solving the Tower of Hanoi problem:" << endl;
hanoi(n, start, end, 'B', count);
return 0;
}
```
在这个程序中,我们使用递归的方式实现汉诺塔的基本解法,并记录每个解的编号。输入层数、起始柱和目标柱后,调用递归函数 `hanoi`,并传入层数、起始柱、目标柱和中间柱(本程序中中间柱固定为B)。在函数中,我们首先递归调用 `hanoi`,将上面的 n-1 个盘子从起始柱移动到中间柱,然后将第 n 个盘子从起始柱移动到目标柱,并增加编号计数器。最后再递归调用 `hanoi`,将中间柱上的 n-1 个盘子移动到目标柱。
注意,本程序中没有对输入进行错误检查,实际应用中需要加入错误检查代码。
### 回答2:
汉诺塔是经典的递归问题,可以用递归的方式求解。下面是实现汉诺塔基本解打印的代码:
```python
def hanoi(n, start, target):
if n == 1:
print(start, '->', target)
else:
other = chr(ord('A') + (ord(start) - ord('A') + 1) % 3 + (ord(target) - ord('A') + 1) % 3)
hanoi(n-1, start, other)
print(start, '->', target)
hanoi(n-1, other, target)
def print_hanoi():
n = int(input("请输入汉诺塔层数(1-10):"))
if n < 1 or n > 10:
print("层数范围不正确,请重新输入")
return
start = input("请输入起始柱(A、B、C):")
target = input("请输入目标柱(A、B、C):")
print("汉诺塔移动解:")
for i in range(1, n+1):
print("编号", i, ":")
hanoi(n, start, target)
print()
print_hanoi()
```
用户可以按照要求输入汉诺塔的层数、起始柱和目标柱。程序将会根据用户的输入打印出编号的汉诺塔移动解。每个解都会有一个唯一的编号,并按照顺序向下打印。
注意,该代码假设输入的柱子名称是大写的 A、B、C,并且要求起始柱和目标柱不能相同。如果起始柱和目标柱相同,在移动过程中会出现错误。
### 回答3:
以下是汉诺塔问题的基本解打印实现的示例代码:
```python
count = 0 # 解的编号
def hanoi(n, start, target, auxiliary):
global count
if n == 1:
count += 1
print(f"编号:{count}")
print(f"移动盘子1从{start}到{target}")
else:
hanoi(n - 1, start, auxiliary, target)
count += 1
print(f"编号:{count}")
print(f"移动盘子{n}从{start}到{target}")
hanoi(n - 1, auxiliary, target, start)
def print_hanoi_solutions():
n = int(input("请输入汉诺塔的层数(1-10):"))
start = input("请输入起始柱(A、B、C):")
target = input("请输入目标柱(A、B、C):")
hanoi(n, start, target, 'B' if start != 'B' and target != 'B' else 'C')
print_hanoi_solutions()
```
运行代码后,会提示用户输入汉诺塔的层数、起始柱和目标柱。然后,程序会根据用户输入打印出汉诺塔问题的基本解,并为每个解前方添加编号。代码中使用了递归的方法来实现汉诺塔问题的解决。