小明非常喜欢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
AC代码
#include<stdio.h>?
#define?N?100000
int?f[N]={};
void?init(){
????f[0]=1,f[1]=1;
????int?i;
????for(i=2;i<45;i++){
????????f[i]=f[i-1]+f[i-2];
????}
}
int?main(){
????int?T;
????scanf("%d",&T);
????init();
????while(T--){
????????int?i,j,k;
????????int?n,cnt=0;
????????scanf("%d",&n);
????????for(i=1;i<45;i++){
????????????for(j=i;j<45;j++){
????????????????for(k=j;k<45;k++){
????????????????????if(f[i]+f[j]+f[k]==n){
????????????????????????cnt++;
????????????????????}
????????????????}
????????????}
????????}
????????printf("%d\n",cnt);
????}
}