分享信息的网站,长沙企业网站建设企业,swf影视网站源码,学校网站建设论文题目大意
给出x#xff0c;问你不小于x#xff0c;且由相同个数的4和7组成的最小的数 解题思路
对于奇数位和大于当前位数最大数的直接特判掉
对于其他的dfs枚举#xff0c;因为如果一个位置放得比原数大#xff0c;那么后面的都确定了#xff0c;所以是O(n)的 code
#…题目大意
给出x问你不小于x且由相同个数的4和7组成的最小的数 解题思路
对于奇数位和大于当前位数最大数的直接特判掉
对于其他的dfs枚举因为如果一个位置放得比原数大那么后面的都确定了所以是O(n)的 code
#includecstdio
#includecstring
#includeiostream
#includealgorithm
#define ll long long
#define N 100100
using namespace std;
int n,pp,a[N];
char s[N];
bool dfs(int x,int num1,int num2)
{if(xn) return true;if(s[x]4num1){//比原数大那么后面直接贪心放最小的a[x]4;num1--;for(int ix1;in;i)if(num1)a[i]4,num1--;else a[i]7,num2--;return true;}if(s[x]4num1){a[x]4;if(dfs(x1,num1-1,num2))//尝试匹配return true;}if(s[x]7num2){a[x]7;num2--;for(int ix1;in;i)if(num1)a[i]4,num1--;else a[i]7,num2--;return true;}if(s[x]7num2){a[x]7;if(dfs(x1,num1,num2-1))return true;}return false;
}
int main()
{while(~scanf(%s,s1)){nstrlen(s1);if(n1){for(int i1;i(n1)/2;i)putchar(4);for(int i1;i(n1)/2;i)putchar(7);putchar(10);}else{pp0;for(int i1;in/2;i)if(s[i]7){pp1;break;}else if(s[i]7){pp2;break;}if(!pp){for(int in/21;in;i)if(s[i]4){pp1;break;}else if(s[i]4){pp2;break;}}if(!pp){for(int i1;in/2;i)putchar(7);for(int i1;in/2;i)putchar(4);putchar(10);}else if(pp1){for(int i1;in/21;i)putchar(4);for(int i1;in/21;i)putchar(7);putchar(10);}else{if(dfs(1,n/2,n/2)){for(int i1;in;i)putchar(a[i]);putchar(10);}}}}return 0;
}