想了半天,一个个写出来找规律太麻烦,于是去网站找解析,说是模拟下过程打出答案,自己也试着模拟了一下
这程序要跑一会儿,不想等的改成20
发现f[n]=2f[n]+1(-1)(1或者-1两者之间波动)
数据如下:
1
3
5
11
21
43
85
171
341
683
1365
2731
5461
10923
21845
43691
87381
174763
349525
699051
1398101
2796203
5592405
11184811
22369621
44739243
89478485
178956971
357913941
715827883
我直接打表
于是写出程序:
模拟程序如下:
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
long long i,j,num,x,y,n,m,a[200];
int dfs(long long z)
{
long long k;
if(z==i)
{
num++;
return;
}
if(z>i)
return;
else
for(k=1;k<=3;k++)
{
if(k==1)
dfs(z+1);
else
dfs(z+2);
}
return;
}
int main()
{
for(i=1;i<30;i++)
{
num=0;
for(j=1;j<=3;j++)
{
if(j==1)
dfs(1);
else
dfs(2);
}
a[i]=num;
}
for(x=1;x<30;x++)
printf("%I64d\n",a[x]);
}
这程序要跑一会儿,不想等的改成20
发现f[n]=2f[n]+1(-1)(1或者-1两者之间波动)
数据如下:
1
3
5
11
21
43
85
171
341
683
1365
2731
5461
10923
21845
43691
87381
174763
349525
699051
1398101
2796203
5592405
11184811
22369621
44739243
89478485
178956971
357913941
715827883
我直接打表
于是写出程序:
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
long long a[50]={1,3,5,11,21,43,85,171,341,683,1365,2731,5461,
10923,21845,43691,87381,174763,349525,699051,
1398101,2796203,5592405,11184811,22369621,44739243,
89478485,178956971,357913941,715827883};
int main()
{ int n,k;
while(scanf("%d",&n)!=EOF)
{
while(n--)
{
scanf("%d",&k);
printf("%I64d\n",a[k-1]);
}
}
}