UVA 948 数的斐波那契进制表示

每个正整数都可以分解成斐波那契数列中的几个数相加……

从大到小贪心法就可以了……

#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
#define PI acos(-1.0)
#define mem(a,b) memset(a,b,sizeof(a))
#define sca(a) scanf("%d",&a)
#define sc(a,b) scanf("%d%d",&a,&b)
#define pri(a) printf("%d\n",a)
#define lson i<<1,l,mid
#define rson i<<1|1,mid+1,r
#define MM 1000005
#define MN 2005
#define INF 100004
#define eps 1e-7
using namespace std;
typedef long long ll;
string solve(int n) //n的斐波那契进制转换
{
    static int fib[305];
    fib[0]=fib[1]=1;
    int i,j;
    for(i=2;i<300;i++)
    {
        fib[i]=fib[i-1]+fib[i-2]; //斐波那契数列
        if(fib[i]>n) {j=i;break;}
    }
    string s;
    for(i=j-1;i>0;i--)
        if(fib[i]<=n) s+=‘1‘,n-=fib[i];
        else s+=‘0‘;
    return s;
}
int main()
{
    int t;
    sca(t);
    while(t--)
    {
        int n;
        sca(n);
        string s=solve(n);
        cout<<n<<" = "<<s<<" (fib)"<<endl;
    }
	return 0;
}

UVA 948 数的斐波那契进制表示,码迷,mamicode.com

时间: 2024-11-13 00:13:55

UVA 948 数的斐波那契进制表示的相关文章

UVA 4855 Hyper Box 斐波那契

题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2856 比赛的时候和陈看了好长时间才看明白题意,和吴讨论做了出来,其实吴确实聪明,脑袋瓜子比较灵活 题意:有一个N维的空间,给你各维的长度,有一些n维的砖块,把空间填满,砖块不能交叉,空间不能一部分为空:求最少用的砖块 砖块各维都必须为斐波那契长度 思路: 空间各维分

斯特林数、斐波那契数 整理

看了几节课<具体数学>,记一下吧不然就真废了.. 斐波那契数 FIBONACCI NUMBERS 卡西尼恒等式 \[F_{n+1}F_{n-1}-F_n^2=(-1)^n,n>0\] 一个包含了形如\(f_{n k}\)(对于\(k\)的较小值)的斐波那契数的多项式公式可以变换成一个只包含\(F_n\)和\(F_{n+1}\)的公式,因为我们可以通过法则\[F_m=F_{m+2}-F_{m+1}\]来用更高次的斐波那契数表示\(F_m\)(当\(m<n\)时),且可以通过\[F_m

CF717A Festival Organization(第一类斯特林数,斐波那契数列)

题目大意:求 $\sum\limits_{n=l}^{r}\dbinom{f_n}{k}\bmod 10^9+7$.其中 $f_n$ 是长度为 $n$ 的 $01$ 序列中,没有连续两个或超过两个 $0$ 的个数. $1\le k\le 200,1\le l\le r\le 10^{18}$. 先考虑如何求 $f_n$. 令 $g[i][j]$ 表示长度为 $i$,结尾是 $j$ 的序列个数. $$g[i][0]=g[i-1][1]$$ $$g[i][1]=g[i-1][0]+g[i-1][1]

[BJOI2019]勘破神机(第一类斯特林数,斐波那契数列)

真的是好题,只不过强行多合一有点过分了…… 题目大意: $T$ 组数据.每个测试点中 $m$ 相同. 对于每组数据,给定 $l,r,k$,请求出 $\dfrac{1}{r-l+1}\sum\limits_{n=l}^r\dbinom{f(n,m)}{k}\bmod 998244353$. 其中 $f(n,m)$ 表示用 $1\times 2$ 的骨牌(可以变成 $2\times 1$)填满 $n\times m$ 的网格的方案数. $1\le T\le 5,1\le l\le r\le 10^{

奥数之斐波那契数列

今天群里出了一个算法题,感觉挺好玩,自己小学的时候数学也好,觉得能搞定,想了好久自己还是没找到解决方法,哎,看来智商还待二次发育.先说下题目: 50个台阶,一次可以走1步或2步,问有多少种走法? 看到这题我首先想到的是用for,类似2元钱可以有多少个1块.5毛.2毛.1毛组成,可是仔细想想还是不对,台阶这个是有顺序的,即使50步中只有一个是两步也有好几种情况,这样想着先从2步的算起,最多有26种,在这26种中还要排序,这样算下来脑袋都大了.还好,智慧在民间,群众的力量无限量,百度一下,网上有解决

HDU 5914 Triangle(打表——斐波那契数的应用)

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5914 Problem Description Mr. Frog has n sticks, whose lengths are 1,2, 3?n respectively. Wallice is a bad man, so he does not want Mr. Frog to form a triangle with three of the sticks here. He decides t

用递归和非递归的方法输出斐波那契数列的第n个元素(C语言实现)

费波那契数列(意大利语:Successione di Fibonacci),又译为费波拿契数.斐波那契数列.费氏数列.黄金分割数列. 在数学上,费波那契数列是以递归的方法来定义: {\displaystyle F_{0}=0} {\displaystyle F_{1}=1} {\displaystyle F_{n}=F_{n-1}+F_{n-2}}(n≧2) 用文字来说,就是费波那契数列由0和1开始,之后的费波那契系数就是由之前的两数相加而得出.首几个费波那契系数是: 0, 1, 1, 2, 3

斐波那契堆

斐波纳契堆(Fibonacci Heap)于 1984 年由 Michael L. Fredman 与 Robert E. Tarjan 提出,1987 年公开发表,名字来源于运行时分析所使用的斐波那契数. 斐波那契堆同二项堆(Binomial Heap)一样,也是一种可合并堆(Mergeable Heap).与二项堆一样,斐波那契堆是由一组最小堆有序树构成,但堆中的树并不一定是二项树.与二项堆中树都是有序的不同,斐波那契堆中的树都是有根而无序的. 实际上,斐波那契堆松散地基于二项堆.如果不对斐

Fibonacci series(斐波纳契数列)的几种常见实现方式

费波那契数列的定义: 费波那契数列(意大利语:Successione di Fibonacci),又译费波拿契数.斐波那契数列.斐波那契数列.黄金分割数列. 在数学上,费波那契数列是以递归的方法来定义: (n≧2) 用文字来说,就是费波那契数列由0和1开始,之后的费波那契系数就由之前的两数相加. 首几个费波那契系数是:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233-- 特别指出:0不是第一项,而是第零项. 下面是费波那契数列的几种常见编程实现: