链接:Problem - 2045 (hdu.edu.cn)
![](https://i-blog.csdnimg.cn/blog_migrate/728741b464501cd50778cc6040c767f2.png)
问题分析:
这是一道递归题目,找到其规律即可求解
解题思路:
借鉴别的大佬寻找的规律求得结果。
假如说先把全部情况都列出来(不考虑首尾不能相同),即为3*2^(n-1)种,这是所有的情况,再减去首位相等的情况即可,这样的话,首尾相等的情况是什么样的呢?不难想象得出,当n-1个空格的时候,加一个格,使首尾颜色相同,这种情况下,n个格且首尾相同情况下所有的颜色种类与n-1的情况下所有的满足题意的情况数相同。
原文链接:https://blog.csdn.net/weixin_45523030/article/details/103883757
寻找到规律后,即可写出代码!
代码实现:
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
double ans(int n)
{
double sum=0;
if(n==2)
return 6;
sum=3*pow(2,n-1)-ans(n-1);
return sum;
}
int main(){
int n;
double answ;
while(cin>>n){
if(n==1) answ=3;
else answ=ans(n);
printf("%0.lf\n",answ);
}
return 0;
}
出现的BUG:
40之后的数值过大 ,,,int装不下,调试了好久。