题目描述
小明非常喜欢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
思路:先用数组记录 Fibonacci数列再用3个循环遍历判断;为保证组合不重复出现组合从小到大
#include<stdio.h>
int main()
{
int f[105];
f[1] = 1;
f[2] = 2;
for(int i = 3;i<=100;i++)
{
f[i] = f[i-1]+f[i-2];
}
int t;
scanf("%d",&t);
while(t--)
{
int n,count = 0;
scanf("%d",&n);
for(int i = 1;i<=100;i++)
{
for(int j = i;j<=100;j++)//从小到大避免从重复
{
for(int k = j;k<=100;k++)
{
if(f[i]+f[j]+f[k]==n)
{
count++;
}
}
}
}
printf("%d\n",count);
}
return 0;
}