Отримати випадковим чином n цілих чисел. Вивести їх за зростанням. Однакові числа виводити один раз.
Будемо використовувати множиниу. Бо: всі елементи множини автоматично сортуються за зростанням та елементи, що вже є у множині, до неї не додаються.
#include <iostream>
#include <set>
#include <cstdlib>
#include <ctime>
using namespace std;
int main() {
// Ініціалізація генератора випадкових чисел
srand(time(0));
set<int> numbers; // Множина для зберігання унікальних чисел
int n = 10; // Кількість чисел для генерації
cout << "Згенеровані числа: ";
for (int i = 0; i < n; i++) {
int x = rand() % 20; // Генеруємо числа від 0 до 19
cout << x << " ";
numbers.insert(x); // Додаємо число до множини
}
cout << "\nУнікальні числа за зростанням: ";
for (int num : numbers) {
cout << num << " "; // Виводимо відсортовані унікальні числа
}
return 0;
}
set, яка автоматично:
Згенеровані числа: 7 4 2 8 5 2 4 9 1 7
Унікальні числа за зростанням: 1 2 4 5 7 8 9
Отримати випадковим чином n цілих чисел. Чи є серед цих чисел однакові?
Будемо використовувати множиниу. Бо елементи, що вже є у множині, до неї не додаються. Тобто, якщо кількість всіх чисел дорівнює кількості чисел у множині, то всі числа різні. А якщо ні, то були однакові.
#include <iostream>
#include <set>
#include <cstdlib>
#include <ctime>
using namespace std;
int main() {
// Ініціалізація генератора випадкових чисел
srand(time(0));
set<int> unique_numbers; // Множина для зберігання унікальних чисел
int n = 10; // Кількість чисел для генерації
cout << "Згенеровані числа: ";
for (int i = 1; i <= n; i++) {
int x = i + rand() % 100; // Генеруємо числа від i до i+99
cout << x << " ";
unique_numbers.insert(x); // Додаємо число до множини
}
cout << "\nЧи є однакові числа? ";
if (unique_numbers.size() < n) {
cout << "Так, є дублікати";
} else {
cout << "Ні, всі числа унікальні";
}
return 0;
}
set автоматично відкидає дублікати:
Згенеровані числа: 56 43 101 87 125 42 56 147 108 93
Чи є однакові числа? Так, є дублікати
Множина (set) в C++ автоматично зберігає лише унікальні значення. Коли ми додаємо всі згенеровані числа до множини, її розмір буде меншим за загальну кількість чисел, якщо були дублікати.
Отримати випадковим чином n цілих чисел. Серед чисел можуть бути однакові. Для кожного числа з’ясувати, скільки разів воно зустрічається.
Всі числа запишемо у множиниу та мультимножину. У множину числа запишуться один раз, а у мультимножину декілька разів. Перебираємо числа у множині, та використовуючи функцію count, для кожного числа з'ясовуємо, скільки разів воно зустрічається у мультимножині.
#include <iostream>
#include <set>
#include <multiset>
#include <cstdlib>
#include <ctime>
using namespace std;
int main() {
// Ініціалізація генератора випадкових чисел
srand(time(0));
set<int> unique_numbers; // Для зберігання унікальних чисел
multiset<int> all_numbers; // Для зберігання всіх чисел з повтореннями
int n = 10; // Кількість чисел для генерації
cout << "Згенеровані числа: ";
for (int i = 1; i <= n; i++) {
int x = i + rand() % 4; // Генеруємо числа від i до i+3
cout << x << " ";
unique_numbers.insert(x);
all_numbers.insert(x);
}
cout << "\n\nКількість входжень кожного числа:\n";
for (int num : unique_numbers) {
cout << "Число " << num << ": " << all_numbers.count(num) << " раз(и)\n";
}
return 0;
}
set зберігає унікальні числа (без повторень)multiset зберігає всі числа (з повтореннями)set рахуємо кількість входжень у multiset.
Згенеровані числа: 2 3 4 4 6 6 7 8 9 10
Кількість входжень кожного числа:
Число 2: 1 раз(и)
Число 3: 1 раз(и)
Число 4: 2 раз(и)
Число 6: 2 раз(и)
Число 7: 1 раз(и)
Число 8: 1 раз(и)
Число 9: 1 раз(и)
Число 10: 1 раз(и)
set для унікальних значеньmultiset для підрахунку кількості входженьВвести два слова. Перевірити, чи вони є анаграмами (тобто складаються з однакових літер у будь-якому порядку).
Літери кожного слова запишемо у дві різні множини, а потім їх порівняємо. Якщо вони однакові, то так, інакше ні.
#include <iostream>
#include <set>
#include <string>
#include <algorithm>
using namespace std;
int main() {
setlocale(0, ""); // Для підтримки українських літер
multiset<char> letters1, letters2; // Для зберігання літер з урахуванням кількості
string word1, word2;
// Введення слів
cout << "Введіть перше слово: ";
getline(cin, word1);
cout << "Введіть друге слово: ";
getline(cin, word2);
// Видалення пробілів (якщо потрібно)
word1.erase(remove(word1.begin(), word1.end(), ' '), word1.end());
word2.erase(remove(word2.begin(), word2.end(), ' '), word2.end());
// Додавання літер до мультимножин
for (char c : word1) {
letters1.insert(tolower(c)); // Регістронезалежне порівняння
}
for (char c : word2) {
letters2.insert(tolower(c));
}
// Перевірка на анаграму
cout << "Результат: ";
if (letters1 == letters2) {
cout << "Так, це анаграми";
} else {
cout << "Ні, це не анаграми";
}
return 0;
}
Введіть перше слово: Шалов
Введіть друге слово: Волаш
Результат: Так, це анаграми
Анаграми - це слова, що складаються з одних і тих же літер у різному порядку. Мультимножина (multiset) зберігає елементи з урахуванням їх кількості, тому ідеально підходить для такої перевірки.
Дано дві множини. Знайти числа, які є в обох множинах (перетин)
Код програми:
#include <iostream>
#include <set>
using namespace std;
int main() {
// Ініціалізація множин
set<int> s1 = {2, 3, 5, 7, 10, 12, 13, 19};
set<int> s2 = {1, 5, 7, 13, 20, 37, 40};
set<int> intersection; // Для зберігання спільних елементів
// Знаходження перетину множин
for (int x : s1) {
if (s2.count(x) > 0) {
intersection.insert(x);
}
}
// Виведення результату
cout << "Перетин множин: ";
for (int x : intersection) {
cout << x << " ";
}
cout << endl;
return 0;
}
Перетин множин: 5 7 13
count() для перевірки наявності елементаДано дві множини. Знайти числа, які є хоча б в одній множині (об'єднання)
Код програми:
#include <iostream>
#include <set>
using namespace std;
int main() {
// Ініціалізація множин
set<int> s1 = {2, 3, 5, 7, 10, 12, 13, 19};
set<int> s2 = {1, 5, 7, 13, 20, 37, 40};
set<int> union_set; // Для зберігання об'єднання множин
// Додавання елементів з першої множини
for (int x : s1) {
union_set.insert(x);
}
// Додавання елементів з другої множини
for (int x : s2) {
union_set.insert(x);
}
// Виведення результату
cout << "Об'єднання множин: ";
for (int x : union_set) {
cout << x << " ";
}
cout << endl;
return 0;
}
Об'єднання множин: 1 2 3 5 7 10 12 13 19 20 37 40
Дано дві множини. Знайти числа, які є у першій множині, але немає в другій (віднімання).
Код програми:
#include <iostream>
#include <set>
using namespace std;
int main() {
// Ініціалізація множин
set<int> s1 = {2, 3, 5, 7, 10, 12, 13, 19};
set<int> s2 = {1, 5, 7, 13, 20, 37, 40};
set<int> difference; // Для зберігання різниці множин
// Знаходження різниці s1 - s2
for (int x : s1) {
if (s2.count(x) == 0) { // Якщо елемент відсутній у s2
difference.insert(x);
}
}
// Виведення результату
cout << "Різниця множин s1 - s2: ";
for (int x : difference) {
cout << x << " ";
}
cout << endl;
return 0;
}
Різниця множин s1 - s2: 2 3 10 12 19
count() для перевірки наявності елементаДано дві множини. Знайти числа, які є у другій множині, але немає у першій (віднімання).
Код програми:
#include <iostream>
#include <set>
using namespace std;
int main() {
// Ініціалізація множин
set<int> s1 = {2, 3, 5, 7, 10, 12, 13, 19};
set<int> s2 = {1, 5, 7, 13, 20, 37, 40};
set<int> difference; // Для зберігання різниці множин
// Знаходження різниці s2 - s1
for (int x : s2) {
if (s1.count(x) == 0) { // Якщо елемент відсутній у s1
difference.insert(x);
}
}
// Виведення результату
cout << "Різниця множин s2 - s1: ";
for (int x : difference) {
cout << x << " ";
}
cout << endl;
return 0;
}
Різниця множин s2 - s1: 1 20 37 40
count() для перевірки наявності елементаДано дві множини. Знайти їх симетричну різницю.
Код програми:
#include <iostream>
#include <set>
using namespace std;
int main() {
// Ініціалізація множин
set<int> s1 = {2, 3, 5, 7, 10, 12, 13, 19};
set<int> s2 = {1, 5, 7, 13, 20, 37, 40};
set<int> sym_diff; // Для зберігання симетричної різниці
// Знаходимо елементи, які є в s1, але відсутні в s2
for (int x : s1) {
if (s2.count(x) == 0) {
sym_diff.insert(x);
}
}
// Знаходимо елементи, які є в s2, але відсутні в s1
for (int x : s2) {
if (s1.count(x) == 0) {
sym_diff.insert(x);
}
}
// Виведення результату
cout << "Симетрична різниця множин: ";
for (int x : sym_diff) {
cout << x << " ";
}
cout << endl;
return 0;
}
Симетрична різниця множин: 1 2 3 10 12 19 20 37 40
count() для перевірки наявності елемента