CF96B Lucky Numbers (easy)(bfs)

CF96B Lucky Numbers (easy)(bfs)

Question:

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,474477are 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 .

Input:

The only line contains a positive integer (1<=n<=10^9). This number doesn’t have leading zeroes.

Output:

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.

Code:

#include<iostream>
#include<iostream>
#include<string>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<cstdio>
#include<queue>

using namespace std;

long long n;
queue<long long> q;

bool check(long long x)
{
    
    
    int s = 0;
    int q = 0;
    while(x)
    {
    
    
        if(x % 10 == 7)
        {
    
    
            q++;
        }
        else
        {
    
    
            s++;
        }
        x /= 10;
    }
    return q == s;
}

int main()
{
    
    
    cin>>n;

    q.push(0);
    while(!q.empty())
    {
    
    
        long long m = q.front();
        q.pop();
        if(m >= n && check(m))
        {
    
    
            cout<<m<<endl;
            return 0;
        }
        else
        {
    
    
            q.push(m * 10 + 4);
            q.push(m * 10 + 7);
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_46052886/article/details/113964443