彼岸

转到题目

突破蝙蝠的包围,yifenfei来到一处悬崖面前,悬崖彼岸就是前进的方向,好在现在的yifenfei已经学过御剑术,可御剑轻松飞过悬崖。
现在的问题是:悬崖中间飞着很多红,黄,蓝三种颜色的珠子,假设我们把悬崖看成一条长度为n的线段,线段上的每一单位长度空间都可能飞过红,黄,蓝三种珠子,而yifenfei必定会在该空间上碰到一种颜色的珠子。如果在连续3段单位空间碰到的珠子颜色都不一样,则yifenfei就会坠落。
比如经过长度为3的悬崖,碰到的珠子先后为 “红黄蓝”,或者 “蓝红黄” 等类似情况就会坠落,而如果是 “红黄红” 或者 “红黄黄”等情况则可以安全到达。
现在请问:yifenfei安然抵达彼岸的方法有多少种?

Input

输入数据首先给出一个整数C,表示测试组数。
然后是C组数据,每组包含一个正整数n (n<40)。

Output

对应每组输入数据,请输出一个整数,表示yifenfei安然抵达彼岸的方法数。
每组输出占一行。

Sample Input

2
2
3

Sample Output

9
21

 题意:安然抵达彼岸的方法数,n是河宽

思路:1 第n项应该分开考虑n-1和n-2是否相同

(1)如果相同那么n就可以没有顾虑的选择3种中的任意一种,则等价于n-2所有的取值所以a[n-2]*3

(2)如果不同那么等价于a[n-1]-a[n-2],即全部减去相同的的那么都应该是不同的,这一部分考虑的就是第n必选择一个和前两相等,那么就应该是(a[n-1]-a[n-2])*2

Code:

#include<stdio.h>
#include<string.h>
#include<algorithm>
typedef long long ll;
const int N=1e5+10;
using namespace std;
int a[50];
void w()
{
    a[1]=3,a[2]=9;
    for(int i=3; i<=40; i++)
    {
        a[i]=a[i-2]*3+(a[i-1]-a[i-2])*2;
    }
}
///  n-2   n-1   n
///a[i-2]*3     若n-2与n-1相同   第n项  随意三种   
///(a[i-1]-a[i-2])*2  若不同   (a[i-1]-a[i-2])是不同的情况 
///  再乘以2(和前面两项任意一个相同)
int main()
{
    int c;
    w();
    scanf("%d",&c);
    while(c--)
    {
        int n;
        scanf("%d",&n);
        printf("%d\n",a[n]);
    }
    return 0;
}

虽然以前做过这道题,但是再次看到,竟然不会了.........思维退化了吗???......继续领悟刷题吧~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵩韵儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值