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