题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2045
很明显的能看出来这是一个找规律的题目
思路分析:
既然是找规律题目就需要先写出来前几项,然后再来分析
先画一个图:
可以看出来当格子≤3的时候 方法依次为 3 6 6
很难的分析出来:
第n格的颜色受第一格和第n-1格影响。
当n≥4时
①当第n-1格和第1格的颜色相同时,第n格的颜色就有两种颜色且不跟第1格同色
所以简单的分析出来:
**第n-1格与第1格颜色相同的数量就是第n-2格的数量,所以当第n-1格与第1格颜色相同时第n格的颜色数量为 *f(n-2)*2
②当第n-1格的颜色与第1格不同时,那么第n格的颜色就会有两种,而其中一种一定与第1格的颜色相同
那么可以分析出来:当第n-1格的颜色与第一格不同时,那么第n格的颜色就是f(n-1)
③所以最终可以得出来通式:*f(n)=f(n-1)+f(n-2)2
代码如下:
#include <stdio.h>
int main()
{
//因为最终数字会特别大 所以这里使用long long 型
long long num[51] = { 0,3,6,6 };//从第一个格子开始
for (int i = 4; i <= 50; ++i) {//存到数组中
num[i] = num[i - 1] + num[i - 2] * 2;
}
int n;
while (~scanf("%d", &n)) {
printf("%lld\n", num[n]);//直接打印
}
return 0;
}