Предмет: Информатика, автор: Arm3nG

Всем привет хочу решить дну задачу но никак не получается ответ нужен на C++
Задача №1573. Повторяющиеся элементы
Распечатайте только те значения элементов массива, которые встречаются в нём более одного раза, при этом каждое значение должно быть распечатано только один раз. Элементы следует распечатывать в том порядке, в котором они впервые встречаются в массиве.

Массив менять нельзя. Создавать новые массивы нельзя. Можно использовать вложенные циклы.

На вход программе сначала подаётся значение ≤100
n

100
. В следующей строке расположены
n
элементов массива - целые числа, по модулю не превосходящие 30000.

Примеры
входные данные
8
4 3 5 2 5 1 3 5
выходные данные
3 5


zertripfix: Есть решение, если еще нужно) Но нет кнопки "добавить ответ". Задай вопрос еще раз. Или что можно сделать что б кнопка появилась? (еще не разу вопросы не задавал здесь, поэтому без понятия что делать если ответ дали, но он неправильный и другие не могут добавить свой)

Ответы

Автор ответа: zertripfix
1

Ответ:

#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;

}

Приложения:
Похожие вопросы