题目描述
小明非常喜欢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>
const int N = 1e9;
int Fi[60] = {1,1,2};
int main()
{
for (int i = 3; Fi[i-1] < N; i ++)
Fi[i] = Fi[i-1] + Fi[i-2];
int T;
scanf("%d",&T);
while ( T --)
{
int n;
scanf("%d",&n);
int ans = 0;
int i,j,k;
for (i = 1; Fi[i] < n; i ++) // 暴力循环
for ( j = i; Fi[j] < n; j ++)
for ( k = j; Fi[k] < n; k ++)
if (Fi[i]+Fi[j]+Fi[k] == n) ans ++;
printf("%d\n",ans);
}
return 0;
}