题目描述
小明非常喜欢Fibonacci数列,数列为 f1=1,f2=2,fn=fn−1+fn−2。 小明想知道对于一个整数n,使得n=fi+fj+fk的组合有多少种? 比如5=1+1+3 或者 5=1+2+2,有2种。注意 1+2+2 和 2+1+2 被认为是同一种。
输入
第一行是一个整数T(1≤T≤1000),表示样例的个数。
每个样例是一个整数n(3≤n≤109)。
输出
依次每行输出一个样例的结果,为一个整数。
样例输入
2 3 5
样例输出
1 2
#include<stdio.h>
int main()
{
int i,j,k;
int f[50];
f[0]=1;
f[1]=2;
for(i=2;i<=50;i++){
f[i]=f[i-1]+f[i-2];
}
int T;
scanf("%d",&T);
while(T--){
int a;
scanf("%d",&a);
int count=0;
for(i=0;i<50;i++){
if(f[i]>a){
break;
}
for(j=i;j<50;j++){
if(f[i]+f[j]>a){
break;
}
for(k=j;k<=50;k++){
if(f[i]+f[j]+f[k]==a){
count++;
}else if(f[i]+f[j]+f[k]>a){
break;
}
}
}
}
printf("%d\n",count);
}
return 0;
}