题目描述:
Petya loves lucky numbers. Everybody knows that positive integers are lucky if their decimal representation doesn't contain digits other than 4 and 7. For example, numbers 47, 744, 4 are lucky and 5, 17, 467 are not.
Lucky number is super lucky if it's decimal representation contains equal amount of digits 4 and 7. For example, numbers 47, 7744, 474477 are super lucky and 4, 744, 467 are not.
One day Petya came across a positive integer n . Help him to find the least super lucky number which is not less than n .
输入描述:
The only line contains a positive integer n (1 ≤ n ≤ 109). This number doesn't have leading zeroes.
输出描述:
Output the least super lucky number that is more than or equal to n.
Please, do not use the %lld specificator to read or write 64-bit integers in C++. It is preferred to use the cin, cout streams or the %I64d specificator.
输入样例:
4500
47
输出样例:
4747
47
一些瞎扯:
这是我刷的第一道ACM真题,直接运行超时把我劝退,跪求大佬解答。TLE on test8。。。。。
我的代码:
#include <bits/stdc++.h>
using namespace std;
bool isSuperLucky(long long n) //判断是不是超级幸运数
{
map<char,int> m; //记录4和7的个数
string s = to_string(n); //把long long型的数字n转换成string型来处理更方便
//判断是不是幸运数字
for(auto it : s)
{
if(it != '4' && it != '7') //若包含除4和7以外的数
{
return false;
}
else
{
m[it]++;
}
}
//判断是不是超级幸运数字
if(m['4'] == m['7'])
{
return true;
}
return false;
}
int main()
{
long long n;
while(cin >> n)
{
for(long long i = n; ;i++)
{
if(isSuperLucky(i))
{
cout << i << endl;
break;
}
}
}
return 0;
}