P1755 斐波那契的拆分

来源:互联网 发布:廖雪峰java 编辑:程序博客网 时间:2024/06/07 06:18

题目背景

题目描述

已知任意一个正整数都可以拆分为若干个斐波纳契数,现在,让你求出n的拆分方法

输入输出格式

输入格式:
一个数t,表示有t组数据

接下来t行,每行一个数n(如题)

输出格式:
t行,每行一个字符串,表示拆分方法(格式:n=a1+a2+a3+..+an),要求从小到大输出

输入输出样例

输入样例#1: 复制
input1:1
1
input2:1
10
输出样例#1: 复制
output1:1=1;
output2:10=2+8;
说明

若有多组数据,以个数最小的为准,若仍有多组,输出右边尽量大的一组

对于100%的数据 t<=1000 1<=n<=10^9

从大到小

#include<iostream>#include<cstdio>using namespace std;int a[60],i,j,x,t,tot,pd,b[60],all;//B数组用于记录void work(int k)//暴搜{    if(k==0)    {        pd=1;        return;    }    for(int i=all;i>=1;i--)    {        while(k-a[i]>=0)        {            k-=a[i];            b[++tot]=a[i];            work(k);            if(pd==1)                return;            tot--;            k+=a[i];        }    }}int main(){    a[1]=1;a[2]=2;i=3;    while(a[i-1]<=1e9)//预处理兔子数列    {        a[i]=a[i-1]+a[i-2];        i++;    }all=i-1;    scanf("%d",&t);    for(i=1;i<=t;i++)    {        scanf("%d",&x);        pd=0;        cout<<x<<"=";        work(x);        for(j=tot;j>=2;j--)        {            cout<<b[j]<<"+";            b[j]=0;        }        cout<<b[1]<<endl;        b[tot]=0;//初始化        tot=0;//初始化    }}
原创粉丝点击