汉诺塔问题(递归)
#include <stdio.h>
// 定义汉诺塔函数
void hanoi(int n, char A, char B, char C) {
if (n == 1) {
printf("将盘子从 %c 移动到 %c\n", A, C);
} else {
//将 n-1 个盘子从 A 移动到 B
hanoi(n - 1, A, C, B);
//将第 n 个盘子从 A 移动到 C
printf("将盘子从 %c 移动到 %c\n", A, C);
//将 B 上的 n-1 个盘子移动到 C
hanoi(n - 1, B, A, C);
}
}
int main() {
int n;
printf("请输入盘子的数量:");
scanf("%d", &n);
// 调用汉诺塔函数
hanoi(n, 'A', 'B', 'C');
return 0;
}
如果一次只能移动一个
#include <stdio.h>
void hanoi(int n, char source, char aux, char dest) {
if (n == 1) {
printf("将盘子从 %c 移动到 %c\n", source, dest);
} else {
hanoi(n - 1, source, dest, aux);
printf("将盘子从 %c 移动到 %c\n", source, dest);
hanoi(n - 1, aux, source, dest);
}
}
int main() {
int n;
printf("请输入盘子的数量:");
scanf("%d", &n);
hanoi(n, 'A', 'B', 'C');
return 0;
}
青蛙跳台阶:(循环)
青蛙跳台阶问题是一个典型的动态规划问题。假设青蛙跳上 n 级台阶,这个问题可以拆解为两个子问题:跳到 n-1 级台阶和跳到 n-2 级台阶。
当青蛙在 n-1 级台阶上时,它只需再跳上 1 级台阶即可到达第 n 级台阶;
当青蛙在 n-2 级台阶上时,它只需再跳上 2 级台阶即可到达第 n 级台阶。
因此,青蛙跳上 n 级台阶的跳法数量是跳上 n-1 级台阶的跳法数量加上跳上 n-2 级台阶的跳法数量。
根据以上分析,我们可以得到递推式:
f(n) = f(n-1) + f(n-2)
初始情况:
- 当 n=1 时,青蛙只有一种跳法,即直接跳上第一级台阶。
- 当 n=2 时,青蛙有两种跳法,可以一次跳两级台阶,也可以分两次跳每次跳一级台阶。
#include <stdio.h>
int jumpSteps(int n){
if (n <= 0) {
return 0;
} else if (n == 1) {
return 1;
} else if (n == 2) {
return 2;
}
int a = 1; // 第 n-2 级台阶的跳法数量
int b = 2; // 第 n-1 级台阶的跳法数量
int result = 0;
for (int i = 3; i <= n; i++) {
result = a + b;
a = b;
b = result;
}
return result;
}
int main() {
int num;
printf("请输入台阶的级数:");
scanf("%d", &num);
int result = jumpSteps(num);
printf("青蛙跳上 %d 级台阶的跳法数量为:%d\n", num, result);
return 0;
}
标签:char,台阶,函数,int,hanoi,C语言,---,printf,盘子
From: https://blog.51cto.com/u_16251486/7588602