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