帮我写一个c++控制台程序,可以玩汉诺塔,最重要的是用户是能够自己移动盘子,直到解决汉诺塔问题给出提示
时间: 2024-03-14 18:48:23 浏览: 29
好的,下面是一个简单的C++控制台程序,可以玩汉诺塔游戏,用户可以自己移动盘子,直到解决汉诺塔问题:
```c++
#include <iostream>
#include <stack>
#include <vector>
using namespace std;
// 定义汉诺塔柱子
stack<int> A, B, C;
// 初始化汉诺塔
void init(int n) {
for(int i = n; i >= 1; i--) {
A.push(i);
}
}
// 打印汉诺塔状态
void print() {
vector<int> a, b, c;
while(!A.empty()) {
a.push_back(A.top());
A.pop();
}
while(!B.empty()) {
b.push_back(B.top());
B.pop();
}
while(!C.empty()) {
c.push_back(C.top());
C.pop();
}
int size = max(a.size(), max(b.size(), c.size()));
for(int i = size-1; i >= 0; i--) {
if(i < a.size()) {
cout << a[i];
} else {
cout << " ";
}
cout << " | ";
if(i < b.size()) {
cout << b[i];
} else {
cout << " ";
}
cout << " | ";
if(i < c.size()) {
cout << c[i];
} else {
cout << " ";
}
cout << endl;
}
cout << "---+---+---" << endl;
cout << " A | B | C " << endl;
}
// 移动盘子
void move(char from, char to) {
stack<int>* f;
stack<int>* t;
if(from == 'A') {
f = &A;
} else if(from == 'B') {
f = &B;
} else {
f = &C;
}
if(to == 'A') {
t = &A;
} else if(to == 'B') {
t = &B;
} else {
t = &C;
}
if(f->empty()) {
cout << "移动失败,请重新输入!" << endl;
} else if(t->empty() || f->top() < t->top()) {
t->push(f->top());
f->pop();
} else {
cout << "移动失败,请重新输入!" << endl;
}
}
// 判断是否完成汉诺塔
bool isFinished(int n) {
return C.size() == n;
}
int main() {
int n;
cout << "请输入汉诺塔的层数:";
cin >> n;
init(n);
print();
while(!isFinished(n)) {
char from, to;
cout << "请输入要移动的盘子所在柱子和目标柱子(例如:A B):";
cin >> from >> to;
move(from, to);
print();
}
cout << "恭喜你成功完成汉诺塔!" << endl;
return 0;
}
```
运行程序后,用户输入汉诺塔的层数,程序会自动初始化汉诺塔,打印汉诺塔状态。用户每次输入要移动的盘子所在柱子和目标柱子,程序会判断是否可以移动盘子,并打印汉诺塔状态。当汉诺塔完成后,程序会给出恭喜提示。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)