c++
8860
Для заданого трицифрового числа n знайдіть суму тризначних чисел, утворених всіма можливими перестановками цифр числа n, включаючи тотожну.
Вхідні дані
Трицифрове натуральне число n.
Вихідні дані
Вивести шукану суму.
Приклади
123
1332
Нехай дано трицифрове число n = abc (цифри a, b, c).
Потрібно знайти суму всіх 6 перестановок трьох цифр.Коротке математичне рішення
Усі 6 перестановок:
abc, acb, bac, bca, cab, cba.
У кожній позиції (сотні, десятки, одиниці) кожна цифра зустрічається рівно 2 рази.
S=2⋅(a+b+c)⋅(100+10+1)=2(a+b+c)⋅111=222(a+b+c)
Отже:Приклад
n = 123 → a+b+c = 6
S = 222 * 6 = 1332#include <iostream> using namespace std; int main() { int n; cin >> n; int a = n / 100; int b = (n / 10) % 10; int c = n % 10; int sum = 222 * (a + b + c); cout << sum; return 0; }
#include <iostream> using namespace std; int main() { int n, a, b, c; cin >> n; c = n % 10; b = (n / 10) % 10; a = n / 100; cout << n + 100 * a + c * 10 + b + 100 * b + 10 * a + c + 100 * b + c * 10 + a + 100 * c + 10 * a + b + 100 * c + b * 10 + a; return 0; }8979Вивести тільки маленькі латинські літери a, що зустрічаються в заданому рядку.
Вхідні дані
Один рядок, що складається лише з маленьких латинських літер та проміжків.
Вихідні дані
Виведіть лише маленькі латинські літери a із заданого рядка. Якщо літера a у рядку відсутня, то виведіть −1.
Приклади
Вхідні дані #1abrakadabraВідповідь #1aaaaaВхідні дані #2qwertyuiop sdfghjkl#include <iostream> #include <string> using namespace std; int main() { string s; getline(cin, s); string result; for (char c : s) { if (c == 'a') result += c; } if (result.empty()) cout << -1; else cout << result; return 0; }8978 Задано рядок s, дайте відповідь на запити наведені нижче.Вхідні дані
Задано рядок s, що містить більше 10 символів. Індексація у рядку починається з 1.
Вихідні дані
В окремих рядках виведіть відповіді на наступні запити:
Слово, що утворюють другий, четвертий і десятий символ рядка s.
Слово, що утворюють перший, другий і останній символ рядка s.
Слово, що утворюють п'ять останніх символів рядка s.
Рядок s без чотирьох останніх символів.
Слово, що утворюють усі символи з непарними індексами.
Довжину слова з попереднього пункту.
Усі символи рядка s через один у зворотному порядку, починаючи з останнього.
Приклади
abrakadabra
bar aba dabra abrakad arkdba 6 abdkra
#include <iostream> #include <string> using namespace std; int main() { string s; getline(cin, s); // 1) другий, четвертий і десятий символи cout << string() + s[1] + s[3] + s[9] << "\n"; // 2) перший, другий і останній символ cout << string() + s[0] + s[1] + s[s.size() - 1] << "\n"; // 3) п'ять останніх символів cout << s.substr(s.size() - 5) << "\n"; // 4) рядок без чотирьох останніх символів cout << s.substr(0, s.size() - 4) << "\n"; // 5) символи з непарними індексами (1-based → це 0,2,4,... у C++) string odd; for (int i = 0; i < (int)s.size(); i += 2) odd += s[i]; cout << odd << "\n"; // 6) довжина слова з попереднього пункту cout << odd.size() << "\n"; // 7) усі символи через один у зворотному порядку, починаючи з останнього string rev; for (int i = s.size() - 1; i >= 0; i -= 2) rev += s[i]; cout << rev << "\n"; return 0; }
Задано рядок s довжиною більше десяти символів. Враховуємо, що перший символ рядка має індекс 0. Знайти і вивести отаке.
Слово, що утворюють третій, сьомий і одинадцятий символ рядка s.
Слово, що утворюють перший і два останніх символа рядка s.
Слово, що утворюють сім перших символів рядка s.
Рядок s без чотирьох перших символів.
Слово, що утворюють усі символи з непарними індексами, починаючи з другого символа рядка s..
Довжину слова з попереднього пункту.
Рядок s у зворотному порядку.
Приклади
abrakadabra
rda ara abrakad kadabra baaar 5 arbadakarba
#include <iostream> #include <string> using namespace std; int main() { string s; getline(cin, s); // 1) третій, сьомий і одинадцятий символи (індекси 2,6,10) cout << string() + s[2] + s[6] + s[10] << "\n"; // 2) перший і два останніх символи (індекс 0, size-2, size-1) cout << string() + s[0] + s[s.size() - 2] + s[s.size() - 1] << "\n"; // 3) сім перших символів cout << s.substr(0, 7) << "\n"; // 4) рядок без чотирьох перших символів cout << s.substr(4) << "\n"; // 5) символи з непарними індексами, починаючи з другого символа (індекси 1,3,5,...) string odd; for (int i = 1; i < (int)s.size(); i += 2) odd += s[i]; cout << odd << "\n"; // 6) довжина слова з попереднього пункту cout << odd.size() << "\n"; // 7) рядок у зворотному порядку string rev(s.rbegin(), s.rend()); cout << rev << "\n"; return 0; }
В заданому масиві цілих чисел потрібно знайти елементи, що повторюються максимальну кількість разів. Спочатку потрібно опоблікувати максимальну частоту дублювання в масиві, а вже потім елементи, які мають таку кількість повторень. Порядок виведення визначається тим, який елемент набирає максимальної повторюваності на вході програми.
Вхідні дані
В першому рядку записано число N. В наступному рядку записано N цілих чисел.Всі числа за модулем не перевищують 100.
Вихідні дані
Максимальна частота повторень в першому рядку та елементи з такою частотою у другому.
Приклади
9 0 -1 1 0 1 1 -2 0 3
3 1 0
Потрібно знайти всі числа, які мають максимальну частоту, але порядок виведення залежить від того:
-
коли під час проходу масиву елемент уперше досягає нового максимуму частоти — тоді список результатів перезаписується цим елементом;
-
коли інший елемент досягає вже існуючого максимуму, він додається в кінець списку.
Таким чином повністю відтворюється логіка прикладу.
Наприклад:
0 -1 1 0 1 1 -2 0 3
Під час обробки:
1першим досягає частоти3→ результат = {1}пізніше
0теж досягає частоти3→ результат = {1, 0}
unordered_map<int,int> freq; — це асоціативний контейнер, який зберігає пари:
ключ → значення
У нашій задачі:
-
ключ (int) — саме число з масиву
-
значення (int) — скільки разів це число вже зустрілось (його частота)
Тобто unordered_map<int,int> freq виступає як словник частот.
Для чого він потрібен у задачі?
Щоб ефективно підрахувати кількість повторень кожного елемента.
При обробці кожного числа ми робимо:
freq[x]++;
Це означає:
-
збільшити лічильник для числа
x; -
якщо
xще не існувало в map — воно автоматично додається з початковим значенням 0.
Комментариев нет:
Отправить комментарий