Решение задачи Двоякие числа с Acmp

Без пояснения   Просмотров: 128


Натуральное число называется двояким, если в его десятичной записи встречается не более двух различных цифр. Например, числа 3, 23, 33, 100, 12121 — двоякие, а числа 123 и 9980 — нет.

Код

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n, k = 0;
    cin >> n;
    int a = n, per = n, per1 = n, s1 = 0, s2 = 0;
    vector<int> b;
    while(a){
        b.push_back(a % 10);
        a/=10;
    }
    sort(b.begin(), b.begin() + b.size());
    for(int i = 0; i < b.size(); ++i)
        if(b[i] != b[i + 1])
            k++;
    if(k < 3){
        cout << n;
        return 0;
    }
    bool bb = false;
    while(!bb){
        b.clear();
        --per;
        a = per;
        k = 0;
        while(a){
            b.push_back(a % 10);
            a/=10;
        }
        sort(b.begin(), b.begin() + b.size());
        for(int i = 0; i < b.size(); ++i)
            if(b[i] != b[i + 1])
                ++k;
        if(k < 3){
            s1 = per;
            bb = 1;
        }
    }
    if(s1 - n == 1){
        cout << s1;
        return 0;
    }
     bb = false;
        while(!bb){
            b.clear();
            ++per1;
            a = per1;
            k = 0;
            while(a){
                b.push_back(a % 10);
                a/=10;
            }
            sort(b.begin(), b.begin() + b.size());
            for(int i = 0; i < b.size(); ++i)
                if(b[i] != b[i + 1])
                    ++k;
            if(k < 3){
                s2 = per1;
                bb = 1;
            }
        }
    if(n - s1 <= s2 - n)
        cout << s1;
    else
        cout << s2;
    return 0;
}

         

Администратор Photo Автор: Администратор



Комментарии

Чтобы написать комментарии вам нужно войти в систему или зарегистрироваться