Метод решения: создаем массив, в который будем записывать найденные номера, заведем переменную index, которая поможет нам добавлять новые значения. Затем запускаем цикл от 0 до 10000(чтобы пройтись по всем номерам). Т.к. номера четырехзначные, то нам нужно будет увеличить 0, до 0000, для этого создаем условие, которое проверяет, количество символов, если оно меньше четырех, то дописывает перед текущем номером нули, то есть, если текущий номер 11, получится 0011. Если номер 237, то получится 0237.
Затем создаем переменную digit, которая покажет, была ли найдена пара одинаковых чисел, также создадим flag, который поможет выйти из двойного цикла.
Создаем двойной цикл, который проходит по всем элементам текущего номера и проверяет, сколько раз они встретились. В цикле проверяем равенство текущих символов, если они совпали и если digit уже не является "а", то значит, что либо данное число встретилось третий раз в номере, либо в данном числе есть другая пара одинаковых чисел, поэтому мы присваиваем flag значение true и завершаем вложенный цикл, если же текущая пара встретилась первый раз, то заменяем переменную digit на найденный символ.
После прохождения вложенных циклов мы проверяем, завершили ли мы предыдущие вложенные циклы досрочно (через переменную flag), а также изменился ли digit, если все хорошо, то присваиваем элементу массива под индексом index значение текущей строки и увеличиваем index на 1. После прохождения всего большого цикла выводим массив.
Answers & Comments
Ответ:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string res[10000];
int index = 0;
for(int i = 0;i<10000;i++)
{
string str = to_string(i);
int strLen = str.length();
if(strLen < 4)
{
for(int i = 0; i < 4 - strLen; i++)
{
str = "0" + str;
}
}
char digit = 'a';
bool flag = false;
for(int i = 0; i < 4;i++)
{
for(int j = i + 1; j < 4; j++)
{
if(str[i] == str[j])
{
if(digit != 'a')
{
flag = true;
break;
}
digit = str[i];
}
}
if(flag)
break;
}
if(!flag && digit != 'a')
{
res[index] = str;
index++;
}
}
for(int i = 0; i < index; i++)
{
cout << res[i] << endl;
}
}
Объяснение:
Метод решения: создаем массив, в который будем записывать найденные номера, заведем переменную index, которая поможет нам добавлять новые значения. Затем запускаем цикл от 0 до 10000(чтобы пройтись по всем номерам). Т.к. номера четырехзначные, то нам нужно будет увеличить 0, до 0000, для этого создаем условие, которое проверяет, количество символов, если оно меньше четырех, то дописывает перед текущем номером нули, то есть, если текущий номер 11, получится 0011. Если номер 237, то получится 0237.
Затем создаем переменную digit, которая покажет, была ли найдена пара одинаковых чисел, также создадим flag, который поможет выйти из двойного цикла.
Создаем двойной цикл, который проходит по всем элементам текущего номера и проверяет, сколько раз они встретились. В цикле проверяем равенство текущих символов, если они совпали и если digit уже не является "а", то значит, что либо данное число встретилось третий раз в номере, либо в данном числе есть другая пара одинаковых чисел, поэтому мы присваиваем flag значение true и завершаем вложенный цикл, если же текущая пара встретилась первый раз, то заменяем переменную digit на найденный символ.
После прохождения вложенных циклов мы проверяем, завершили ли мы предыдущие вложенные циклы досрочно (через переменную flag), а также изменился ли digit, если все хорошо, то присваиваем элементу массива под индексом index значение текущей строки и увеличиваем index на 1. После прохождения всего большого цикла выводим массив.