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

с++

 8974

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

Вхідні дані

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

Вихідні дані

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

Приклади

Вхідні дані #1
7
0 1 -2 1 0 0 3
Відповідь #1
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.

Вихідні дані

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

Приклади

Вхідні дані #1
7
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.

Вихідні дані

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

Приклади

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



 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; }

пятница, 21 ноября 2025 г.

с++

 8980 изначити кількість речень у заданому тексті. Вважайте, що речення закінчується одним із символів "."(крапка), "!"(знак оклику) або "?"(знак запитання), а наборів знаків типу "...", "!!!" і "?!" в тексті немає.

Вхідні дані

Один рядок тексту, що складається з латинських символів, розділових знаків та проміжків. Рядок містить не більш ніж 200 символів.Щоб визначити кількість речень, достатньо порахувати символи, які завершують речення:

  • .

  • !

  • ?

Оскільки за умовою немає багатокрапок ("...") та повторів типу "!!!", кожен такий символ — це кінець одного речення.

#include <bits/stdc++.h>

using namespace std;

int main() {

    string s;

    getline(cin, s);

    int cnt = 0;

    for (char c : s) {

        if (c == '.' || c == '!' || c == '?')

            cnt++;

    }

    cout << cnt;

    return 0;

}

8981 Знайдіть індекси першого та останнього проміжку в заданому рядку, враховуючи, що перший символ має індекс .

Вхідні дані

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

Вихідні дані

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

Приклади

Вхідні дані #1
I am programming on Python.
Відповідь #1
1 19

Оскільки потрібно знайти індекс першого пробілу та індекс останнього пробілу, досить пройтись по рядку й запам’ятати ці значення.

Якщо пробілів немає — вивести -1.

#include <bits/stdc++.h>

using namespace std;

int main() {

    string s;

    getline(cin, s);

    int first = -1, last = -1;

    for (int i = 0; i < (int)s.size(); i++) {

        if (s[i] == ' ') {

            if (first == -1) first = i;

            last = i;

        }

    }

8982 Виведіть усі індекси маленької латинської літери a в заданому рядку, враховуючи, що перший символ має індекс 0.

Вхідні дані

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

Вихідні дані

Виведіть усі індекси літери a в одному рядку. Якщо літера a у рядку не зустрічається, то вивести -1.

завдання (за прикладами) полягає у виведенні всіх індексів літери a в заданому рядку.

Перевірка:

abrakadabra
Символи a стоять на позиціях:

a(0) b(1) r(2) a(3) k(4) a(5) d(6) a(7) b(8) r(9) a(10)

Вихід:

0 3 5 7 10

#include <bits/stdc++.h>

using namespace std;
int main() {
    string s;
    getline(cin, s);
    vector<int> indices;
    for (int i = 0; i < (int)s.size(); i++) {
        if (s[i] == 'a') {
            indices.push_back(i);
        }
    }
    if (indices.empty()) {
        cout << -1;
    } else {
        for (int i = 0; i < (int)indices.size(); i++) {
            if (i > 0) cout << " ";
            cout << indices[i];
        }
    }
}

8983 Задано рядок, що містить вираз з цифр, знаків арифметичних операцій і дужок. Знайдіть кількість використаних у виразі цифр.

Вхідні дані

Арифметичний вираз, що містить цифри, дужки та арифметичні знаки.

Вихідні дані

Виведіть кількість цифр у виразі.

Приклади

Вхідні дані #1
9*8+76-54/3+2**10
#include <bits/stdc++.h>
using namespace std;

int main() {
    string s;
    getline(cin, s);

    int cnt = 0;
    for (char c : s) {
        if (isdigit(c)) cnt++;
    }

    cout << cnt;
    return 0;
}
8984
#include <bits/stdc++.h>
using namespace std;

int main() {
    string s;
    getline(cin, s);

    int count_ops = 0;

    for (size_t i = 0; i < s.size(); i++) {
        // Перевірка двосимвольних операторів
        if (i + 1 < s.size()) {
            if (s[i] == '*' && s[i + 1] == '*') {
                count_ops++;
                i++;
                continue;
            }
            if (s[i] == '/' && s[i + 1] == '/') {
                count_ops++;
                i++;
                continue;
            }
        }

        // Односимвольні оператори
        if (s[i] == '+' || s[i] == '-' || s[i] == '*' ||
            s[i] == '/' || s[i] == '%') {
            count_ops++;
        }
    }

    cout << count_ops;
    return 0;
}

8985

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

Вхідні дані

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

Вихідні дані

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

Приклади

Вхідні дані #1
abrakadabra
Відповідь #1
brkdbr
#include <bits/stdc++.h>
using namespace std;
int main() {
    string s;
    getline(cin, s);
    for (char c : s) {
        if (c != 'a') cout << c;
    }
    return 0;
}
8986 

Задано рядок, що складається з латинських літер та проміжків. Видаліть в ньому всі символи з індексами від n до m включно. Нумерація починається з 0.

Вхідні дані

Перший рядок містить текст, що складається з не більш ніж 1000 латинських літер та проміжків. Другий рядок містить два цілих числа n і m (n ≤ m).

Вихідні дані

Виведіть оновлений рядок.

Приклади

Вхідні дані #1
abrakadabra
3 6
Відповідь #1
abrabra
Вхідні дані #2
This is my lovely beautiful house
7 16
#include <bits/stdc++.h>
using namespace std;

int main() {
    string s;
    getline(cin, s);

    int n, m;
    cin >> n >> m;

    if (n >= 0 && m < (int)s.size() && n <= m) {
        s.erase(n, m - n + 1);
    }

    cout << s;
    return 0;
}
8987  Замініть в рядку всі символи '' на '' і навпаки.

Вхідні дані

Один рядок довжиною не більше  символів, що містить тільки латинські букви і пробіли.

Вихідні дані

Виведіть рядок з виконаною заміною.

Приклади

Вхідні дані #1
abrakadabra
Відповідь #1
barbkbdbarb
#include <bits/stdc++.h>
using namespace std;

int main() {
    string s;
    getline(cin, s);

    for (char &c : s) {
        if (c == 'a') c = 'b';
        else if (c == 'b') c = 'a';
    }
    cout << s;
    return 0;
}
8988

У рядку, що складається з латинських літер і проміжків, замінити кожну послідовність символів "ab" на "ups".

Вхідні дані

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

Вихідні дані

Виведіть оновлений рядок.

Приклади

Вхідні дані #1
abrakadabra
Відповідь #1
upsrakadupsra
#include <bits/stdc++.h>
using namespace std;

int main() {
    string s;
    getline(cin, s);

    size_t pos = 0;
    while ((pos = s.find("ab", pos)) != string::npos) {
        s.replace(pos, 2, "ups"); // замінюємо 2 символи на "ups"
        pos += 3; // рухаємося далі після вставки
    }

    cout << s;
    return 0;
}
8989 Задано рядок, що складається з англійських букв і проміжків. Потрібно в ньому подвоїти всі символи a.

Вхідні дані

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

Вихідні дані

Відповідь до задачі.

Приклади

Вхідні дані #1
abrakadabra
Відповідь #1
aabraakaadaabraa
#include <bits/stdc++.h>
using namespace std;

int main() {
    string s;
    getline(cin, s);

    string result;

    for (char c : s) {
        if (c == 'a') {
            result += "aa"; // подвоюємо 'a'
        } else {
            result += c;    // додаємо інші символи без змін
        }
    }

    cout << result;
    return 0;
}
8990 Рядок складається з маленьких латинських літер і проміжків. Подвійте в ньому всі голосні літери, тобто літери  та .

Вхідні дані

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

Вихідні дані

Виведіть рядок з усіма подвоєними голосними літерами.

Приклади

Вхідні дані #1
welcome to python
Відповідь #1
weelcoomee too pyythoon
#include <bits/stdc++.h>
using namespace std;

int main() {
    string s;
    getline(cin, s);

    string result;
    string vowels = "aeiouy"; // голосні

    for (char c : s) {
        if (vowels.find(c) != string::npos) {
            result += c;
            result += c; // подвоюємо голосні
        } else {
            result += c; // інші символи залишаються
        }
    }

    cout << result;
    return 0;
}
8960 З консолі вводиться масив з N цілих чисел. Програма повинна знайти суму елементів масиву, не враховуючи всіх його найменших і найбільших елементів.

Вхідні дані

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

Вихідні дані

Відповідь до задачі.

Приклади

Вхідні дані #1
7
6 2 7 1 7 1 2
Відповідь #1
10
#include <bits/stdc++.h>
using namespace std;
int main() {
    int N;
    cin >> N;
    vector<int> a(N);
    for (int i = 0; i < N; i++) cin >> a[i];
    int mn = *min_element(a.begin(), a.end());
    int mx = *max_element(a.begin(), a.end());

    int sum = 0;
    for (int x : a) {
        if (x != mn && x != mx) {
            sum += x;
        }
    }
    cout << sum;
 
}
8961 Задано масив з n цілих чисел. Знайдіть найменший елемент масиву, що зустрічається найпершим та поміняйте його з першим елементом у масиві, не змінюючи порядок інших елементів.

Вхідні дані

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

Вихідні дані

Вивести елементи оновленого масиву.

Приклади

Вхідні дані #1
7
6 -3 5 -5 -4 7 -5
Відповідь #1
-5 -3 5 6 -4 7 -5
#include <bits/stdc++.h>
using namespace std;

int main() {
    int n;
    cin >> n;
    vector<int> a(n);

    for (int i = 0; i < n; i++) cin >> a[i];

    // знаходимо мінімальний елемент
    int min_val = a[0];
    int min_idx = 0;

    for (int i = 1; i < n; i++) {
        if (a[i] < min_val) {
            min_val = a[i];
            min_idx = i;
        }
    }

    // міняємо місцями з першим елементом
    swap(a[0], a[min_idx]);

    // вивід
    for (int i = 0; i < n; i++) {
        if (i) cout << " ";
        cout << a[i];
    }

    return 0;
}