解题思路:先找到数列中最大的小于k的数,从最大的一直往下加并计数,如果大于k,计数减一,取前一个小的数,直到和等于k。
int findMinFibonacciNumbers(int k){
int array[255]={0};
array[0]=1;
array[1]=1;
int cnt=0;
int sum=0;
int i;
for(i=0;array[i+1]<k;i++)
{
array[i+2]=array[i+1]+array[i];
}
for(int j=i;;j--)
{
if(array[j+1]==k)
return 1;
sum+=array[j];
cnt++;
if(sum>k)
{
sum-=array[j];
cnt--;
}
if(sum==k)break;
}
return cnt;
}