hdu 5676 幸运数

来源:互联网 发布:ubuntu安装百度输入法 编辑:程序博客网 时间:2024/05/29 02:33

这道题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");    }}


0 0