lightoj 1105 - Fi Binary Number 水

就是二进制的斐波那契数...很容易看懂...

这题看有人用数位DP做,感觉其实没那个必要,仔细观察前十个就会发现,其实就是一个数字分解成几个斐波那契的和..有那个数字的是1,没有的是0...

至于为何不能相邻,因为相邻的两个斐波那契数就会合成为下一个...所以没有相邻的..

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll f[60];
int main()
{
    f[1]=1,f[2]=2;
    for(int i=3;i<=55;i++)
        f[i]=f[i-1]+f[i-2];
    int t;
    scanf("%d",&t);
    for(int cas=1;cas<=t;cas++)
    {
        int n,i=55;
        scanf("%d",&n);
        printf("Case %d: ",cas);
        while(f[i]>n) i--;
        while(i>=1)
        {
            if(n>=f[i])
            {
                n-=f[i];
                printf("1");
            }
            else
                printf("0");
            i--;
        }
        printf("\n");
    }
    return 0;
}


你可能感兴趣的:(水,乱搞,lightoj)