我们坚信:暴力出奇迹!
这题其实打一个暴力就能过,具体思路是先把斐波那契数列的前45项求出来(只要大于10^9就行了,弄个五的倍数吉利~QAQ~)
斐波那契数列求出来了后,进行一个贪心(当前最大可选那个),从后面大的数据开始算(原题:若有多组数据,以个数最小的为准,若仍有多组,输出右边尽量大的一组)
贪心过后,把答案存在一个数组里,逆序输出。
代码如下(纯净代码)
#include<bits/stdc++.h> //懒人专用,但比赛可能会爆ling。
using namespace std;
long long a[45];
void fen(int x)
{
cout<<x<<"=";
int q[45],w=0;
memset(q,0,sizeof(q));//个人习惯
int k=x;
while(k>0)
{
int l=45-1;
while(a[l]>k&&l>=0) l--;
q[w]=a[l];
w++;
k-=a[l];
}
cout<<q[w-1];//格式输出
for(int i=w-2;i>=0;i--) cout<<"+"<<q[i];
cout<<endl;
}
int main()
{
a[0]=a[1]=1;
for(int i=2;i<45;i++) a[i]=a[i-1]+a[i-2];
//构造数列
int t,n;
cin>>t;
while(t--)
{
cin>>n;
fen(n);//自动忽略函数名T_T
}
return 0;
}