zcmu-1327 核电站问题(没有什么是打表+找规律不能解决的)

Description

一个核电站有N个放核物质的坑,坑排列在一条直线上。如果连续3个坑中放入核物质,则会发生爆炸,于是,在某些坑中可能不放核物质。现在,请你计算:对于给定的N,求不发生爆炸的放置核物质的方案总数。

Input

输入文件只有多行,每行对应一个正整数N<=40;

Output

输出文件有多行,每行只有一个正整数,表示方案总数

Sample Input

1 2 3 4 10

Sample Output

2 4 7 13 504

 最近被找规律这个强势的操作震惊了,于是乎,没有什么是我不能找规律的!

思路:

这个问题就是简化成坑里放不放东西,放了表示为1,不放表示为0,n个坑,有2^n种放法,所以就可以打表,打几个表找规律,然后可以找到规律n >= 4的时候,a[i] = 前三项的和

【通过代码】

#include <cstdio>
#include <iostream>
int a[45]={0,2,4,7};
int main()
{
    int n;
    while(scanf("%d",&n) != EOF)
    {
        if(n <= 3)
            printf("%d\n",a[n]);
        else {
            for(int i = 4; i <= n;i++)
            {
                a[i] = a[i - 1] + a[i - 2] + a[i - 3];
            }
            printf("%d\n",a[n]);
        }
    }
    
    return 0;
}

【打表代码】

#include <cstdio>//打表
#include <iostream>
#include <cstring>
#include <vector>
#include <cmath>
#include <algorithm>
#include <sstream>
void dectobin( int n ){
    int result=0,k=1,i,temp;
    temp = n;
    while(temp){
        i = temp%2;
        result = k * i + result;
        k = k*10;
        temp = temp/2;
    }
    printf("%d\n", result);

}
int main() {
    int n;
    while(std::cin>>n)
    {
        int x = pow(2,n);
        for(int i = 1; i <= x;i++)
        {
            dectobin(i);
        }
    }

    return 0;
}

猜你喜欢

转载自blog.csdn.net/hzyhfxt/article/details/82025367