hdu 5676 幸运数

这道题10的18次方,普通方法肯定超时,奇数容易处理,主要是卡在偶数上,比赛当时也想到了字符串,想999要进位,越想越麻烦。。。。


参考大神思路:http://blog.csdn.net/qq_22522375/article/details/51288411

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    int num;
    scanf("%d",&num);
    while(num--)
    {
        char a[40];
        scanf("%s",a);
        int len;
        len=strlen(a);
        if(len%2==1)//奇数位输出下一个偶数位
        {
            for(int i=1;i<=len/2+1;i++)
                printf("4");
            for(int i=1;i<=len/2+1;i++)
                printf("7");
        }
        else//偶数位
        {

            char b[40];
            int ok=0,flag=0;
            for(int i=1;i<=len/2;i++)//一半7一半4
                b[ok++]='4';
            for(int i=1;i<=len/2;i++)//一半7一半4
                b[ok++]='7';
            do
            {
                if(strcmp(b,a)>=0)
                {
                    flag=1;
                    for(int i=0;i<ok;i++)
                        printf("%c",b[i]);
                    break;
                }
            }while(next_permutation(b,b+ok));
            if(flag==0)
            {
                for(int i=1;i<=len/2+1;i++)
                    printf("4");
                for(int i=1;i<=len/2+1;i++)
                    printf("7");
            }
        }
         printf("\n");
    }
}


posted @ 2017-04-17 10:42  X_na  阅读(158)  评论(0)    收藏  举报