输入一个整数n代表棋盘的格子,该数字大于1且小于等于64。如输入2,则表示有2个格子,第一个格子放1粒,第二个格子放2粒,则2个格子一共需要3粒麦子。 输出要求 输出n个格子需要的麦粒数。 输入样例 9 输出样例 511 C语言
时间: 2024-10-21 16:15:11 浏览: 57
基于数据结构的一个经典案例——马踏棋盘问题求解.pdf
这是一个经典的动态规划问题,通常被称为“兔子进笼”或者“斐波那契数列变种”。给定的题目可以转化为求前n个斐波那契数列的和。斐波那契数列的规律是每个数等于它前面两个数之和,对于n=0和n=1,结果分别为0和1。所以,计算第n个格子所需的麦粒数,就是前n个斐波那契数的和。
C语言的解决方案可以用循环或者递归实现,这里是一个简单的循环版本:
```c
#include <stdio.h>
int fibonacci(int n) {
int fib[n];
fib[0] = 0;
fib[1] = 1;
for (int i = 2; i < n; i++) {
fib[i] = fib[i - 1] + fib[i - 2];
}
return fib[n - 1]; // 返回第n个斐波那契数
}
int main() {
int n;
scanf("%d", &n);
printf("%d\n", fibonacci(n)); // 输出n个格子所需的麦粒数
return 0;
}
```
输入样例`9`对应输出样例`511`,因为斐波那契数列的第九项是511。
阅读全文