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;
}