其他分享
首页 > 其他分享> > P1755 斐波那契的拆分[普及-]

P1755 斐波那契的拆分[普及-]

作者:互联网

https://www.luogu.com.cn/problem/P1755
涉及知识点:模拟,数学
橙色题
思路: 一.先把斐波那契数列的前45项求出来 二.斐波那契数列求出来了后,进行一个贪心(当前最大可选那个),从后面大的数据开始算(原题:若有多组数据,以个数最小的为准,若仍有多组,输出右边尽量大的一组) 三.贪心过后,把答案存在一个数组里,逆序输出。 注:数组下标最好从0开始,因为如果从1开始,当w=2时,w-2=0,无法输出正确结果。
代码:  
#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;//洛谷识别不出/n
}
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;
}

 

标签:45,--,P1755,斐波,while,那契
来源: https://www.cnblogs.com/2elaina/p/16449322.html