Другие языки программирования и технологии

ПОМОГОТЕ ПЛЗ ЯЗЫК СИ/СИ++

Натуральное число называется двояким, если в его десятичной записи встречается не более двух различных цифр. Например, числа 3, 23, 33, 100, 12121 — двоякие, а числа 123 и 9980 — нет. Для заданного натурального числа N требуется найти ближайшее к нему двоякое число, не меньшее заданного.
#include <iostream>
#include <set>
using namespace std;
bool twice(unsigned n) {
set<unsigned> box;
do box.insert(n % 10); while (n /= 10);
return box.size() == 2;
}
unsigned result(unsigned n) {
while (!twice(++n)) { ; }
return n;
}
int main() {
cout << ">>> ";
unsigned n;
cin >> n;
cout << result(n) << endl;
system("pause");
}
Александр Проданец
Александр Проданец
76 156
Лучший ответ
Можно тупо перебирать, пока не наткнешься на такое число. Если всходные данные в пределах сотен тысяч, то такой подход даже обеспечит вменяемое время работы
Фархат Ж.
Фархат Ж.
8 860
https://pastebin.com/5QWvAJs1

#include < iostream >
#include < windows.h >
#include < vector >
#include < algorithm >

using namespace std;

bool valid(int k);

void main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
system("color 0A");

cout << "Введите число N ";
int n;
for (;;)
{
cin >> n;
if (!((int)cin.get() == 10 || cin.rdbuf()->in_avail() == 0) || !cin || n < 0)
{
cin.clear();
cin.ignore(cin.rdbuf()->in_avail(), '\n');
cout << "Ошибка при вводе. Повторите" << endl;
}
else
{
break;
}
}
for (;;++n)
{
if (valid(n))
{
cout << n << endl;
break;
}
}

system("pause");
}

bool valid(int k)
{
vector < int > v;

for (; k > 0;)
{
v.push_back(k % 10);
k /= 10;
}
sort(v.begin(), v.end());
int old = v[0];
unsigned f = 1;
for (auto t : v)
{
if (t != old)
{
++f;
}
old = t;
}
if (f <= 2)
return true;
else
return false;
}
Акбар Жапаров
Акбар Жапаров
8 552