zoukankan      html  css  js  c++  java
  • hdoj4814(思维)

    题目链接:https://vjudge.net/problem/HDU-4814

    题意:将十进制数转换为phi进制。phi为黄金分割率,phi=(1+√5)/2。


    思路:

    • 应用公式2*phi(n)=phi(n+1)+phi(n-2)可以将第n位的>1的数字转换成0/1。
    • 应用公式phi(n-2)+phi(n-1)=phi(n)可以将连续的1消除。
    • 1e9的数在phi进制中大致为50位,对于a[200],令i=100为个位,即最开始a[100]=n,然后循环利用上述两条应用得到最终答案。

    AC code:

    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    
    const int maxn=205;
    int a[maxn],flag,n;
    
    int main(){
        while(~scanf("%d",&n)){
            memset(a,0,sizeof(a));
            a[100]=n;
            flag=1;
            while(flag){
                flag=0;
                for(int i=2;i<maxn-1;++i)
                    if(a[i]>1){
                        a[i-2]+=a[i]/2;
                        a[i+1]+=a[i]/2;
                        a[i]%=2;
                        flag=1;
                    }
                for(int i=0;i<maxn-2;++i)
                    if(a[i]&&a[i+1]){
                        int tmp=min(a[i],a[i+1]);
                        a[i]-=tmp;
                        a[i+1]-=tmp;
                        a[i+2]+=tmp;
                        flag=1;
                    }
            }
            int l=0,r=maxn-1;
            while(l<100&&!a[l]) ++l;
            while(r>100&&!a[r]) --r;
            for(int i=r;i>=100;--i)
                printf("%d",a[i]);
            if(l!=100){
                printf(".");
                for(int i=99;i>=l;--i)
                    printf("%d",a[i]);
            }
            printf("
    ");
        }
        return 0;
    }
  • 相关阅读:
    express框架总结
    http协议和file协议的区别
    苹果和安卓机的兼容问题
    nodejs搭建服务器
    VsCode编辑器
    编辑器统一 快捷键
    前后端分离 方案
    资源
    commonJs的运行时加载和es6的编译时加载
    mock 数据 解决方案
  • 原文地址:https://www.cnblogs.com/FrankChen831X/p/12503141.html
Copyright © 2011-2022 走看看