请用C++编写汉诺塔小游戏程序
时间: 2023-08-10 13:02:23 浏览: 109
好的,以下是用C++编写的汉诺塔小游戏程序:
```c++
#include <iostream>
using namespace std;
void hanoi(int n, char A, char B, char C) {
if (n == 1) {
cout << A << " -> " << C << endl;
} else {
hanoi(n - 1, A, C, B);
cout << A << " -> " << C << endl;
hanoi(n - 1, B, A, C);
}
}
int main() {
int n;
cout << "请输入汉诺塔的层数:";
cin >> n;
hanoi(n, 'A', 'B', 'C');
return 0;
}
```
运行程序后,会要求用户输入汉诺塔的层数,然后程序会输出每一步的移动过程,最终完成汉诺塔的移动。
相关问题
请用C++编写汉诺塔小游戏程序,主要功能如下: 1、开始游戏(需选择铜板的块数,不同的块数代表着不同的难易程度,不同的难易程度对应着所用时间的阈值,如果玩家在该阈值内成功将一根石针上的所有铜板移动至另一根则游戏挑战成功;如果该次打破了最高记录,则在游戏结束之时显示“恭喜玩家成功打破记录,用时多少”;) 2. 历史记录 (记录不同铜板数情况下游戏用时、步数、是否成功等,显示最高记录) 3、游戏演示 (对于不同铜板数的挑战有个游戏演示,一步一步教新手如何正确移动铜板) 4、退出游戏 。要求: 1. 所有的游戏记录能同步到文件;也可以从文件中读取数据到程序; 2. 能够设计菜单实现功能选择
你好!以下是一个可以满足你需求的 C 语言代码示例:
```
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_BLOCKS 20 // 最大铜板数
// 结构体,用于存储一次游戏的信息
typedef struct {
int blocks; // 铜板数
int steps; // 步数
int time; // 用时(秒)
int success; // 是否成功
} GameRecord;
// 全局变量,用于存储历史最佳记录
GameRecord bestRecord[MAX_BLOCKS];
// 函数原型
void displayMenu();
void startGame();
void showHistory();
void showDemo();
void exitGame();
void updateBestRecord(int blocks, int steps, int time, int success);
void readRecordsFromFile();
void writeRecordsToFile();
int main() {
int option;
readRecordsFromFile(); // 从文件中读取历史记录
do {
displayMenu();
printf("请选择: ");
scanf("%d", &option);
switch (option) {
case 1:
startGame();
break;
case 2:
showHistory();
break;
case 3:
showDemo();
break;
case 4:
exitGame();
break;
default:
printf("输入有误,请重新选择\n");
break;
}
} while (option != 4);
return 0;
}
// 显示菜单
void displayMenu() {
printf("\n========= 汉诺塔小游戏 =========\n");
printf("1. 开始游戏\n");
printf("2. 历史记录\n");
printf("3. 游戏演示\n");
printf("4. 退出游戏\n");
printf("=================================\n");
}
// 开始游戏
void startGame() {
int blocks;
printf("请输入铜板数 (1-%d): ", MAX_BLOCKS);
scanf("%d", &blocks);
if (blocks < 1 || blocks > MAX_BLOCKS) {
printf("铜板数
汉诺塔c++递归代码
汉诺塔是一个经典的递归问题,它涉及将一堆圆盘从一根柱子移动到另一根柱子,遵守规则:每次只能移动一个圆盘,并且大圆盘不能放在小圆盘之上。以下是使用 C++ 编写的递归实现代码:
```cpp
#include <iostream>
// 定义递归函数,towerOfHanoi
void towerOfHanoi(int n, char from_rod, char to_rod, char aux_rod) {
if (n > 0) { // 当有圆盘时
// 递归地处理前 n - 1 个圆盘
towerOfHanoi(n - 1, from_rod, aux_rod, to_rod);
// 将当前的大圆盘移动到目标位置
std::cout << "Move disk " << n << " from rod " << from_rod << " to rod " << to_rod << "\n";
// 对剩下的 n - 1 个圆盘进行同样的操作,但辅助和目标互换角色
towerOfHanoi(n - 1, aux_rod, to_rod, from_rod);
}
}
int main() {
int numDisks; // 圆盘的数量
std::cout << "Enter the number of disks: ";
std::cin >> numDisks;
// 调用函数,开始汉诺塔游戏,第一个柱子为A,第二个柱子为B,第三个柱子为C
towerOfHanoi(numDisks, 'A', 'C', 'B');
return 0;
}
```
当你运行此程序并输入圆盘的数量时,它会按照汉诺塔的规则打印出移动步骤。
阅读全文