1242Ivan的梦 解题报告

Ivan的梦

时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte
总提交:67            测试通过:26

描述

又是英语课,Ivan最讨厌英语课了,上课总是不知不觉就睡着了。这次Ivan做了一个神奇的梦,梦见了一长串码,“Ivan!”“啊!”Ivan很悲剧的被老师发现了正在睡觉,醒来的Ivan拼命的回想着那一串密码,没准儿那密码就是拯救世界的最终秘籍呢!隐约中Ivan想起来那一长串密码长度为n,好像只由(A,C,M)三种字符组成(可以只有其中一种或两种字符,但绝对不能有其他字符),并且这一串密码中不存在两个“M”相邻的情况,因为Ivan在梦中知道的某种特殊的秘密,所以不存在MM这种情况。

输入

输入数据包含多个测试实例,每个测试实例占一行,由一个整数n组成,表示这串密码的长度为n。(0<n<40)

输出

对于每个测试实例,请输出这串密码有多少种排列的可能性,每个答案占一行。

样例输入

1
2

样例输出

3

8

ac代码:

#include<stdio.h>
int main()
{
    long long n;
    long long a,b,c;int i;
    while(scanf("%I64d",&n)!=EOF)
    {
        if(n==1)
        {printf("3\n");continue;}
        if(n==2)
        {printf("8\n");continue;}
        for(a=3,b=8,c=0,i=0;i<n-2;i++)
        {
            c=2*(a+b);
            a=b;
            b=c;
        }
        printf("%I64d\n",c);
    }
    return 0;
}
总结:

乍一看还真尼玛像一个排列组合的数学题,后来讲答案的时候真的一点都不想打死这个出题的人。。居然是找规律填数字。。。说的高大上点就是递归吧。

相当于这么一个数列{3,8,22,60.....}后一项是前两项的和的两倍。。。

既然是递归么。。我就想了一个函数的递归调用。。。输入40的时候尼玛当时我就木了。。。隔了5还是6秒还是更长时间才出来。。。后来易彰彪说用在循环里面递归。。。然后朕就想了abc这么个方法。。。让a表示第前2项。。b表示第前一项。。。然后循环n-2次就ok。很晚了 朕睡了,众爱卿跪安!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值