zoukankan      html  css  js  c++  java
  • hdu-5676 ztr loves lucky numbers(乱搞题)

    题目链接:

    ztr loves lucky numbers

     Time Limit: 2000/1000 MS (Java/Others)
     Memory Limit: 65536/65536 K (Java/Others)
    问题描述
    ztr喜欢幸运数字,他对于幸运数字有两个要求
    1:十进制表示法下只包含4、7
    2:十进制表示法下4和7的数量相等
    比如47,474477就是
    而4,744,467则不是
    
    现在ztr想知道最小的但不小于n的幸运数字是多少
    输入描述
    TT(1T105​​)组数据,每组数据一个正整数n,n<=10^18}1n10​^18​​
    输出描述
    TT行,每行即答案
    输入样例
    2
    4500
    47
    输出样例
    4747
    47


    题意

    思路

    分情况讨论呗;

    AC代码
    #include <iostream>
    #include <cstdio>
    #include <cmath>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    typedef long long LL;
    const int N=1e5+6;
    const LL mod=1e9+7;
    const double PI=acos(-1.0);
    int a[30],b[30],vis1,vis2;
    char s[30];
    int check(int x)
    {
        for(int i=0;i<x/2;i++)
        {
            if(b[i]<7)return 1;
            else if(b[i]>7)return 0;
        }
        for(int i=x/2;i<x;i++)
        {
            if(b[i]<4)return 1;
            else if(b[i]>4)return 0;
            else continue;
        }
        return 1;
    }
    void print(int x1,int x2)
    {
        for(int i=1;i<=x1;i++)printf("4");
        for(int i=1;i<=x2;i++)printf("7");
    }
    void print(int type)
    {
        if(type==4)printf("4"),vis1--;
        else printf("7"),vis2--;
    }
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
           scanf("%s",s);
           if(s[0]<'1'&&s[0]>'9')printf("47");
           else
           {
            int num=strlen(s);
            for(int i=0;i<num;i++)
                b[i]=s[i]-'0';
            if(num&1)
            {
                   num++;
                   print(num>>1,num>>1);
            }
            else
            {
                if(!check(num))
                {
                    num+=2;
                    print(num>>1,num>>1);
                }
                else
                {
                    vis2=vis1=(num>>1);
                    for(int i=0;i<num;i++)
                    {
                        if(b[i]>4&&b[i]<7)
                        {
                            print(7);
                            print(vis1,vis2);
                            break;
                        }
                        else if(b[i]==7)print(7);
                        else if(b[i]<4)
                        {
                            if(vis1)
                            {
                                print(4);
                                print(vis1,vis2);
                                break;
                            }
                            else
                            {
                                for(int j=0;j<vis2;j++)printf("7");
                                break;
                            }
                        }
                        else
                        {
                            LL ans1=0,ans2=0;
                            for(int j=0;j<vis2+vis1-1;j++)
                            {
                               if(j<vis2) ans1=ans1*10+7;
                               else ans1=ans1*10+4;
                            }
                            for(int j=i+1;j<num;j++)ans2=ans2*10+b[j];
                            if(ans2<=ans1&&vis1)print(4);
                            else
                            {
                                print(7);
                                print(vis1,vis2);
                                break;
                            }
                        }
                    }
                }
            }
            }
    printf("
    ");
        }
        return 0;
    }
  • 相关阅读:
    SpringBoot中使用Redis
    SpringBoot中实现事务
    SpringBoot中集成持久层框架Mybatis
    JavaScript遍历数组、对象
    web面试(一)
    create-react-app初始化报错及配置less
    JavaScript异步(SuperAgent , isomorphic-fetch)
    JavaScript数组
    JavaScript(token,cookie)
    JavaScript时间段重叠
  • 原文地址:https://www.cnblogs.com/zhangchengc919/p/5449525.html
Copyright © 2011-2022 走看看