среда, 26 ноября 2025 г.

 c++

8860

Для заданого трицифрового числа n знайдіть суму тризначних чисел, утворених всіма можливими перестановками цифр числа n, включаючи тотожну.

Вхідні дані

Трицифрове натуральне число n.

Вихідні дані

Вивести шукану суму.

Приклади

Вхідні дані #1
123
Відповідь #1
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)S = 2 \cdot (a + b + c) \cdot (100 + 10 + 1) = 2(a+b+c)\cdot 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

Вивести тільки маленькі латинські літери , що зустрічаються в заданому рядку.

Вхідні дані

Один рядок, що складається лише з маленьких латинських літер та проміжків.

Вихідні дані

Виведіть лише маленькі латинські літери  із заданого рядка. Якщо літера  у рядку відсутня, то виведіть .

Приклади

Вхідні дані #1
abrakadabra
Відповідь #1
aaaaa
Вхідні дані #2
qwertyuiop 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 через один у зворотному порядку, починаючи з останнього.

Приклади

Вхідні дані #1
abrakadabra
Відповідь #1
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;
}
8977

Задано рядок s довжиною більше десяти символів. Враховуємо, що перший символ рядка має індекс 0. Знайти і вивести отаке.

  • Слово, що утворюють третій, сьомий і одинадцятий символ рядка s.

  • Слово, що утворюють перший і два останніх символа рядка s.

  • Слово, що утворюють сім перших символів рядка s.

  • Рядок s без чотирьох перших символів.

  • Слово, що утворюють усі символи з непарними індексами, починаючи з другого символа рядка s..

  • Довжину слова з попереднього пункту.

  • Рядок s у зворотному порядку.

Приклади

Вхідні дані #1
abrakadabra
Відповідь #1
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;
}

8976

В заданому масиві цілих чисел потрібно знайти елементи, що повторюються максимальну кількість разів. Спочатку потрібно опоблікувати максимальну частоту дублювання в масиві, а вже потім елементи, які мають таку кількість повторень. Порядок виведення визначається тим, який елемент набирає максимальної повторюваності на вході програми.

Вхідні дані

В першому рядку записано число N. В наступному рядку записано N цілих чисел.Всі числа за модулем не перевищують 100.

Вихідні дані

Максимальна частота повторень в першому рядку та елементи з такою частотою у другому.

Приклади

Вхідні дані #1
9
0 -1 1 0 1 1 -2 0 3
Відповідь #1
3
1 0

Потрібно знайти всі числа, які мають максимальну частоту, але порядок виведення залежить від того:

  • коли під час проходу масиву елемент уперше досягає нового максимуму частоти — тоді список результатів перезаписується цим елементом;

  • коли інший елемент досягає вже існуючого максимуму, він додається в кінець списку.

Таким чином повністю відтворюється логіка прикладу.

Наприклад:
0 -1 1 0 1 1 -2 0 3

Під час обробки:

  • 1 першим досягає частоти 3 → результат = {1}

  • пізніше 0 теж досягає частоти 3 → результат = {1, 0}

#include <iostream> #include <vector> #include <unordered_map> using namespace std; int main() { int N; cin >> N; vector<int> a(N); for(int i = 0; i < N; i++) cin >> a[i]; unordered_map<int,int> freq; int maxFreq = 0; vector<int> result; for(int x : a) { freq[x]++; if (freq[x] > maxFreq) { maxFreq = freq[x]; result.clear(); result.push_back(x); } else if (freq[x] == maxFreq) { // Додається лише коли він "доганяє" існуючий максимум result.push_back(x); } } cout << maxFreq << "\n"; for (int x : result) cout << x << " "; return 0; }

unordered_map<int,int> freq; — це асоціативний контейнер, який зберігає пари:

ключ → значення

У нашій задачі:

  • ключ (int) — саме число з масиву

  • значення (int) — скільки разів це число вже зустрілось (його частота)

Тобто unordered_map<int,int> freq виступає як словник частот.


Для чого він потрібен у задачі?

Щоб ефективно підрахувати кількість повторень кожного елемента.
При обробці кожного числа ми робимо:

freq[x]++;

Це означає:

  • збільшити лічильник для числа x;

  • якщо x ще не існувало в map — воно автоматично додається з початковим значенням 0.

8975
В заданому масиві цілих чисел потрібно знайти елементи, що повторюються максимальну кількість разів. Спочатку потрібно опублікувати максимальну частоту дублювання в масиві, а вже потім елементи, які мають таку кількість повторень. Порядок виведення визначається першою появою модного елемента на вході програми.

Вхідні дані
В першому рядку записано число N. В наступному рядку записано N цілих чисел.Всі числа за модулем не перевищують 100.

Вихідні дані
Максимальна частота повторень в першому рядку та елементи з такою частотою у другому.

Приклади
Вхідні дані #1
9
0 -1 -2 1 1 0 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, тому можна використовувати масив 201 //Index shift: -100 → index 0, 100 → index 200 vector<int> freq(201, 0); // Підрахунок частот for (int x : a) freq[x + 100]++; // Знаходимо максимальну частоту int maxFreq = 0; for (int i = 0; i < 201; i++) if (freq[i] > maxFreq) maxFreq = freq[i]; // Виводимо результат cout << maxFreq << "\n"; // Виводимо елементи з цією частотою у порядку першої появи bool firstOutput = true; for (int x : a) { if (freq[x + 100] == maxFreq) { // Виводимо кожне значення лише один раз freq[x + 100] = -1; // позначаємо як "вже виведено" cout << x << " "; } } return 0; }

Комментариев нет:

Отправить комментарий