Контейнеры изучали? Так вот можно:
#include <vector>
#include <iostream>
int main()
{
int k, l, m, n; std::cin >> n;
std::vector<int> A(n);
for (l = 0; l < n; ++l) std::cin >> A[l];
for (auto a: A)
{
k = 0;
for (auto b: A) if (a == b) ++k;
if (k == 1) std::cout << a << ' ';
}
}
Временная сложность получается O(n²). Можно также исключать неуникальные элементы из массива (обходя его, например, с конца) инструкцией erase; при этом количество операций вроде бы должно уменьшиться (да и то не таким образом чтобы уменьшить временну́ю сложность алгоритма!), но так как массив, элементы которого вводятся с клавиатуры вручную, скорее всего небольшой, то и никакие оптимизации тут ровным счётом ни к чему!
Без контейнеров:
#include <iostream>
int main()
{
int k, l, n; std::cin >> n;
int *A = new int [n];
for (l = 0; l < n; ++l) std::cin >> A[l];
for (l = 0; l < n; ++l)
{
k = 0;
for (m = 0; m < n; ++m) if (A[l] == A[m]) ++k;
if (k == 1) std::cout << A[l] << ' ';
}
delete [] A;
return 0;
}
Дан массив. Распечатайте только те значения элементов массива, которые встречаются в нём ровно один раз. Элементы следует распечатывать в том порядке, в котором они встречаются в массиве. Создавать новые массивы нельзя.
Обратите внимание, что разобранная в лекции задача отличается от данной.
Входные данные
В первой строке входных данных содержится натуральное число n
(n⩽100) — количество элементов массива. В следующей строке содержатся n натуральных чисел, не превосходящих 30000
, элементы массива.
Выходные данные
Выведите ответ к задаче.