Всем привет хочу решить дну задачу но никак не получается ответ нужен на C++
Задача №1573. Повторяющиеся элементы
Распечатайте только те значения элементов массива, которые встречаются в нём более одного раза, при этом каждое значение должно быть распечатано только один раз. Элементы следует распечатывать в том порядке, в котором они впервые встречаются в массиве.
Массив менять нельзя. Создавать новые массивы нельзя. Можно использовать вложенные циклы.
На вход программе сначала подаётся значение ≤100
n
≤
100
. В следующей строке расположены
n
элементов массива - целые числа, по модулю не превосходящие 30000.
Примеры
входные данные
8
4 3 5 2 5 1 3 5
выходные данные
3 5
Answers & Comments
Ответ:
#include <iostream>
using namespace std;
int main()
{
int n;
while(true) {
cout << "Enter n: ";
cin >> n;
if (n <= 0 || n > 100) {
cout << endl << "Error: 0 < n ≤ 100" << endl;
cin.clear();
} else break;
}
int array[n];
/* Можно заполнить случайными числами
for (int i = 0; i < n; i++) {
array[i] = rand()%100;
cout << array[i] << " ";
} cout << endl << endl;
*/
cout << "Enter values: " << endl;
for (int i = 0; i < n; i++) {
while(true) {
cin >> array[i];
if (abs(array[i]) > 30000) {
cout << "Error: input must be ≤ 30000" << endl;
cin.clear();
} else break;
}
} cout << endl << endl;
cout << "Result: " << endl;
for (int i = 0; i < n-1; i++) {
bool isItRepeting = false;
/*
Идем в обратном направлении. Проверяем было ли число (array[i]) раньше.
Если да - то дальше не проверяем. Например:
1 2 3 1 5 6 1
^ дошили до этого числа
1 2 3 1 5 6 1
^ идем в обратном направлении и находим что 1 уже была, а значит в право
не идем искать повторы 1 и переходим на следующее число (5)
*/
if (i != 0) {
for (int l = i-1; l >= 0; l--) {
if(array[i] == array[l]) {
isItRepeting = true;
break;
}
}
}
if (!isItRepeting) {
for (int j = i+1; j < n; j++) {
if(array[i] == array[j]) {
cout << array[i] << " ";
break;
}
}
}
}
cout << endl;
return 0;
}