8974
Задано масив цілих чисел. Виведіть тільки такі його елементи, що повторюються декілька разів. Тобто числа, що зустрічаються один раз, не виводяться взагалі, а з декількох однакових елементів в масиві вибираємо один з найбільшим індексом. Якщо таких елементів не існує, виведіть повідомлення NO.
Вхідні дані
В першому рядку задано число n. В наступному рядку записано n цілих чисел. Всі числа за модулем не перевищують 100.
Вихідні дані
Виведіть в одному рядку елементи масиву, що повторюються.
Приклади
7 0 1 -2 1 0 0 3
1 0
Маємо масив:
0 1 -2 1 0 0 3
Частоти і останні індекси:
Число Частота Останній індекс
0 3 5
1 2 3
-2 1 –
3 1 –
Залишаємо лише ті, що зустрічаються більше одного разу.
Маємо:
1 → останній індекс 3
0 → останній індекс 5
У прикладі вивід:
1 0
Це саме у порядку зростання останнього індексу.
✔ Алгоритм
Порахуємо частоту кожного числа (−100..100 → масив freq[201]).
Запам’ятаємо останній індекс появи — масив last[201].
Зберемо всі числа з freq > 1.
Відсортуємо їх за lastIndex зростанням.
Виведемо.
Якщо таких нема — вивести NO.
✔ C++ код (правильний)
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> a(n);
for (int i = 0; i < n; i++)
cin >> a[i];
// Масиви частот і останніх індексів (зміщення +100)
vector<int> freq(201, 0);
vector<int> last(201, -1);
for (int i = 0; i < n; i++) {
int x = a[i] + 100;
freq[x]++;
last[x] = i;
}
// Збираємо елементи, що повторюються більше 1 разу
vector<int> vals;
for (int i = 0; i < 201; i++) {
if (freq[i] > 1)
vals.push_back(i - 100); // повертаємо справжнє значення
}
if (vals.empty()) {
cout << "NO";
return 0;
}
// Сортуємо за зростанням останнього індексу
sort(vals.begin(), vals.end(),
[&](int a, int b) {
return last[a + 100] < last[b + 100];
});
for (int x : vals)
cout << x << " ";
return 0;
}8973
З заданого масиву цілих чисел потрібно видалити всі дублювання елементів. Тобто з декількох однакових елементів в масиві залишається тільки елемент з найбільшим індексом.
Вхідні дані
В першому рядку записано число N. В наступному рядку записано N цілих чисел.Всі числа за модулем не перевищують 100.
Вихідні дані
Вивести елементи масиву без повторень в одному рядку через проміжок, не змінюючи початковий порядок.
Приклади
Вхідні дані #17 0 1 -2 1 0 0 3Відповідь #1-2 1 0 3#include <iostream> #include <vector> using namespace std; int main() { int N; cin >> N; vector<int> a(N); for (int i = 0; i < N; i++) cin >> a[i]; // Масив для останніх індексів чисел -100..100 vector<int> lastIndex(201, -1); for (int i = 0; i < N; i++) { lastIndex[a[i] + 100] = i; } // Виводимо тільки числа на їх останньому індексі for (int i = 0; i < N; i++) { if (lastIndex[a[i] + 100] == i) cout << a[i] << " "; } return 0; }8971З заданого масиву цілих чисел потрібно видалити всі дублювання елементів. Тобто з декількох однакових елементів в масиві залишається тільки елемент з найменшим індексом.
Вхідні дані
В першому рядку записано число N. В наступному рядку записано N цілих чисел.Всі числа за модулем не перевищують 100.
Вихідні дані
Вивести елементи масиву без повторень в одному рядку через проміжок, не змінюючи початковий порядок.
Приклади
Вхідні дані #17 0 1 -2 1 0 0 3Відповідь #10 1 -2 3#include <iostream> #include <vector> using namespace std; int main() { int N; cin >> N; vector<int> a(N); for (int i = 0; i < N; i++) cin >> a[i]; // Масив для відстеження чисел від -100 до 100 vector<bool> seen(201, false); for (int i = 0; i < N; i++) { int idx = a[i] + 100; if (!seen[idx]) { cout << a[i] << " "; seen[idx] = true; } } return 0; }
Комментариев нет:
Отправить комментарий