ACM劝退题 Lucky Numbers (easy)

题目描述:

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

猜你喜欢

转载自blog.csdn.net/weixin_42449444/article/details/85386680