汉诺塔c语言 要求由用户输入盘子数和柱子名称
时间: 2024-05-01 19:22:20 浏览: 78
好的,以下是汉诺塔的 C 语言代码,可以由用户输入盘子数和柱子名称:
```c
#include <stdio.h>
void hanoi(int n, char from, char to, char via) {
if (n == 1) {
printf("Move disk from %c to %c\n", from, to);
return;
}
hanoi(n-1, from, via, to);
printf("Move disk from %c to %c\n", from, to);
hanoi(n-1, via, to, from);
}
int main() {
int n;
char a, b, c;
printf("Enter the number of disks: ");
scanf("%d", &n);
printf("Enter the name of first pole: ");
scanf(" %c", &a);
printf("Enter the name of second pole: ");
scanf(" %c", &b);
printf("Enter the name of third pole: ");
scanf(" %c", &c);
hanoi(n, a, c, b);
return 0;
}
```
在这个程序中,我们使用递归来解决汉诺塔问题。`hanoi` 函数接受三个参数:盘子数量 `n`,起始柱子名称 `from`,目标柱子名称 `to`,以及中介柱子名称 `via`。如果只有一个盘子,我们直接将它从起始柱子移动到目标柱子。否则,我们将前 n-1 个盘子从起始柱子移动到中介柱子,然后将第 n 个盘子从起始柱子移动到目标柱子,最后将前 n-1 个盘子从中介柱子移动到目标柱子。
在 `main` 函数中,我们首先要求用户输入盘子数量和三个柱子的名称,然后调用 `hanoi` 函数来解决问题。
阅读全文