斐波那契数列:
int Fib(int n)
{
int a = 1;
int b = 1;
int c = 1;//在这里最好给1或0
while (n > 2)//这里大于2,其实就是从第三个开始加
{
c = a + b;
a = b;
b = c;
n--;
}
return c;
if (n <= 2)
return 1;
}
int main()
{
int n;
int ret = 0;
scanf("%d", &n);
ret = Fib(n);
printf("%d", ret);
return 0;
}
C语言解决汉诺塔问题:
void hanoi(int n, char source, char auxiliary, char target);
int main() {
int n;
// 获取用户输入的盘子数量
printf("请输入汉诺塔的盘子数量:");
scanf("%d", &n);
// 调用汉诺塔函数
hanoi(n, 'A', 'B', 'C');
return 0;
}
// 汉诺塔递归函数
void hanoi(int n, char source, char auxiliary, char target)
{
if (n == 1)
{
// 只有一个盘子时,直接移动到目标柱子
printf("将第%d个盘子从 %c 移动到 %c\n",n, source, target);
}
else
{
// 将 n-1 个盘子从 source 移动到 auxiliary
hanoi(n - 1, source, target, auxiliary);
// 将剩下的一个盘子从 source 移动到 target
printf("将第%d个盘子从 %c 移动到 %c\n",n, source, target);
// 将 n-1 个盘子从 auxiliary 移动到 target
hanoi(n - 1, auxiliary, source, target);
}
}
C语言解决青蛙跳台阶的问题:
unsigned long long jumpStairs(unsigned int n);
int main() {
unsigned int n;
// 获取用户输入的台阶数
printf("请输入台阶的数量:");
scanf("%u", &n);
// 计算青蛙跳上n阶台阶的总跳法数
unsigned long long ways = jumpStairs(n);
// 输出结果
printf("青蛙跳上%u阶台阶的总跳法数为:%llu\n", n, ways);
return 0;
}
// 动态规划解决青蛙跳台阶问题
unsigned long long jumpStairs(unsigned int n) {
// 基本情况
if (n == 1) return 1;
if (n == 2) return 2;
// 初始化前两个台阶的跳法数
unsigned long long dp[n + 1];
dp[1] = 1;
dp[2] = 2;
// 动态规划计算
for (unsigned int i = 3; i <= n; ++i) {
dp[i] = dp[i - 1] + dp[i - 2];
}
// 返回第n个台阶的跳法数
return dp[n];
}
此时的n会报错,原因是变量不能直接用来声明数组的大小。可以用指针或动态分配内存的方式来创建一个大的数组。
unsigned long long jumpStairs(unsigned int n);
int main()
{
unsigned int n;
// 获取用户输入的台阶数
printf("请输入台阶的数量:");
scanf("%u", &n);
// 计算青蛙跳上n阶台阶的总跳法数
unsigned long long ways = jumpStairs(n);
// 输出结果
printf("青蛙跳上%u阶台阶的总跳法数为:%llu\n", n, ways);
return 0;
}
// 动态规划解决青蛙跳台阶问题
unsigned long long jumpStairs(unsigned int n)
{
// 动态分配数组空间
unsigned long long* dp = (unsigned long long*)malloc((n + 1) * sizeof(unsigned long long));
// 基本情况
dp[0] = 1;
dp[1] = 1;
dp[2] = 2;
// 动态规划计算
for (unsigned int i = 3; i <= n; ++i)
{
dp[i] = dp[i - 1] + dp[i - 2];
}
// 返回第n个台阶的跳法数,并释放内存
unsigned long long result = dp[n];
free(dp);
return result;
}