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