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

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


Натуральное число называется двояким, если в его десятичной записи встречается не более двух различных цифр. Например, числа 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 Автор: Администратор



Комментарии

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

  1. Avatar
    Тимур
    2021-10-28 19:12:33

    #include<iostream>
    #include<set>
    using namespace std;
    set<int> arr;
    bool func(int n) {
    arr.clear();
    while (n!=0)
    {
    int t = n % 10;
    arr.insert(t);
    n /= 10;
    }
    if (arr.size()>2)
    {
    return false;
    }
    return true;
    }
    int main(){
    int n;
    cin >> n;
    int b = n;
    int a=n;
    while (true)
    {
    if (func(n))
    {
    break;
    }
    n--;

    }
    while (true)
    {
    if (func(a))
    {
    break;
    }
    a++;
    }

    if ((b-n)>(a-b))
    {
    cout << a;
    }
    else
    {
    cout << n;
    }
    }


Заявка на расчет