пятница, 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;
}

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

 c++

8902 На вході програми маємо натуральне число n. Серед натуральних чисел більших ніж n, що не діляться на 23 і 5 знайти найменше.

Вхідні дані

Натуральне число n.

Вихідні дані

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

#include <bits/stdc++.h>

using namespace std;

int main() {

    long long n;

    cin >> n;

    long long p = n + 1;

    while (true) {

        if (p % 2 != 0 && p % 3 != 0 && p % 5 != 0)

           break;

        p++;

    }

    cout << p;

  }

8903 Програма має ввести з консолі ціле число n та знайти число попереднє до n, що кратне 5.

#include <bits/stdc++.h>

using namespace std;

int main() {

    long long n;

    cin >> n;

    long long ans = n - (n % 5) - 5;

    cout << ans;

    return 0;

}

8904 Програма має ввести з консолі натуральне число n та знайти число попереднє до n, що є деяким степенем двійки

#include <bits/stdc++.h>

using namespace std;

int main() {

    long long n;

    cin >> n;

    long long i = 0;

    if (n > 0) {

        i = 1;

        while (i * 2 < n) {

            i *= 2;

        }

    }

    cout << i;

}

8905 Програма має ввести з консолі натуральне число n та знайти число попереднє до n, що не ділиться на 23 і 5.

#include <bits/stdc++.h>
using namespace std;
int main() {
    long long n;
    cin >> n;
    long long p = n - 1;
    while (true) {
        if (p % 5 != 0 && p % 2 != 0 && p % 3 != 0)
            break;
        p--;
    }
    cout << p;  
}

8906 На вході програми маємо ціле число n. Серед цілих чисел менших n та кратних 11 знайти найбільше.
#include <bits/stdc++.h>
using namespace std;
int main() {
    long long n;
    cin >> n;
    long long p = n - 1;
    while (true) {
        if (p % 11 == 0)
            break;
        p--;
    }
    cout << p;
 }
або другий спосіб #include <bits/stdc++.h>
using namespace std;
int main() {
    long long n;
    cin >> n;
    long long p = n - 1;
    long long ans = p - (p % 11);
    cout << ans << "\n";
    return 0;
}

8907 На вході програми маємо натуральне число n. Серед чисел менших n, які рівні повним кубам знайти найбільше. 
#include <bits/stdc++.h>
using namespace std;
int main() {
    long long x;
    cin >> x;
    if (x == 1) {
        cout << 0 << "\n";
    } else {
        long double y = exp(logl(x) / 3.0L); // кубічний корінь через логарифм
        long long i = (long long)y;          // ціла частина
        long long t = i * i * i;
        if (t != x) {
            cout << t << "\n";
        }
    }
    return 0;
}
або 
#include <bits/stdc++.h>
using namespace std;
int main() {
    long long n;
    cin >> n;
    if (n <= 1) {
        cout << 0 << "\n"; // немає кубів < 1
        return 0;
    }
    long long p = n - 1;
    long long k = (long long)cbrt((long double)p); // цілий кубічний корінь
    long long result = k * k * k;
    cout << result << "\n";
    return 0;
}
8908На вході програми маємо натуральне число n (n>9). Серед натуральних чисел, що мають менше цифр ніж число n знайти найбільше.

#include <bits/stdc++.h>
using namespace std;
int main() {
    string n;
    cin >> n;
    int len = n.length();
    if (len > 1) {
        // Виводимо число з (len-1) дев'яток
        for (int i = 1; i < len; i++) {
            cout << 9;
        }
        cout << "\n";
    }
    return 0;
}
8909  На вході програми маємо послідовність цілих чисел, що закінчується числом 0. Потрібно знайти довжину даної послідовності, не враховуючи останнього нуля.
#include <bits/stdc++.h>
using namespace std;
int main() {
    long long n;
    long long s = 0;

    while (true) {
        cin >> n;
        if (n == 0) break;  // якщо введено 0, завершуємо цикл
        s++;
    }
    cout << s << "\n";
    return 0;
}
8910 На вході програми маємо послідовність цілих чисел, що закінчується числом 0. Потрібно знайти суму даної послідовності, не враховуючи останнього нуля. 
#include <bits/stdc++.h>
using namespace std;

int main() {
    long long n;
    long long s = 0;

    while (true) {
        cin >> n;
        if (n == 0) break;  // якщо введено 0, завершити цикл
        s += n;             // додаємо до суми
    }

    cout << s << "\n";
    return 0;
}
8911 На вході програми маємо послідовність цілих чисел, що закінчується числом 0. Потрібно знайти кількість від'ємних чисел в даній послідовності.
#include <bits/stdc++.h>
using namespace std;

int main() {
    long long n;
    int negative_count = 0;

    while (true) {
        cin >> n;
        if (n == 0) break;           // закінчення послідовності
        if (n < 0) negative_count++; // лічильник від’ємних чисел
    }

    cout << negative_count << "\n";
    return 0;
}
8912
На вході програми маємо послідовність цілих чисел, що закінчується числом 0. Потрібно знайти суму додатних чисел в даній послідовності, не враховуючи останнього нуля.
#include <bits/stdc++.h>
using namespace std;

int main() {
    long long n;
    long long sum_positive = 0;

    while (true) {
        cin >> n;
        if (n == 0) break;           // закінчення послідовності
        if (n > 0) sum_positive += n; // додаємо тільки додатні числа
    }

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

Вхідні дані

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

Вихідні дані

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

#include <bits/stdc++.h>

using namespace std;


bool is_vowel(char c) {

    return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' || c == 'y';

}


int main() {

    string s;

    getline(cin, s); // читаємо рядок повністю


    string result;

    for (char c : s) {

        result += c;           // додаємо символ

        if (is_vowel(c)) {

            result += c;       // якщо голосна, додаємо ще раз

        }

    }

    cout << result << "\n";

    return 0;

}

9000 Задано рядок, що складається з маленьких латинських літер. Виведіть усі його літери, впорядковані за алфавітом (в порядку зростання ASCII кодів його символів).
#include <iostream> #include <algorithm> #include <string> using namespace std; int main() { string str; int kordon = 0; cin>>str; for(int i = 0; i!= str.length(); i++){ for(int j = kordon; j!= str.length(); j++){ if(str[i] > str[j]){ swap(str[i], str[j]); } } kordon++; } cout<<str; return 0; }
909 Визначити кількість слів у заданому фрагменті тексту.

Вхідні дані

В єдиному рядку задано фрагмент тексту на англійській мові, кількість символів у якому не перевищує . Гарантується, що у тексті відсутні тире, дефіси, цифри і числа.

#include <bits/stdc++.h>

using namespace std;

int main() {

    string line;

    getline(cin, line); // читаємо цілий рядок

    istringstream iss(line);

    string word;

    int count = 0;

    while (iss >> word) { // читаємо по слову

        count++;

    }

    cout << count << "\n";

    return 0;

}

926 Задано сторони  та діагональ  опуклого чотирикутника. Визначіть площу чотирикутника, використовуючи допоміжну функцію обчислення площі трикутника за формулою Герона.

Вхідні дані

В одному рядку задано  дійсних чисел , як це показано на рисунку.

Вихідні дані

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

#include <bits/stdc++.h>

using namespace std;

// Функція обчислення площі трикутника за формулою Герона

double heron(double x, double y, double z) {

    double p = (x + y + z) / 2.0;

    return sqrt(p * (p - x) * (p - y) * (p - z));

}

int main() {

    double a, b, c, d, f;

    cin >> a >> b >> c >> d >> f;

    // Площа двох трикутників

    double area1 = heron(a, b, f);

    double area2 = heron(c, d, f);

    double total_area = area1 + area2;

    cout << fixed << setprecision(4) << total_area << "\n";

}

927
#include <bits/stdc++.h>
using namespace std;

int main() {
    int n;
    cin >> n;

    long long total = 0; // загальна кількість іграшок дешевше 50

    for (int i = 0; i < n; i++) {
        int a;
        double b;
        cin >> a >> b;

        if (b < 50) {
            total += a;
        }
    }

    cout << total << "\n";
    return 0;
}


вторник, 19 ноября 2024 г.

 11753

Ключові ідеї для розв'язання:

  1. Очікувана сума очок (Expected Value):
    Для кожної гральної кістки можна обчислити її математичне сподівання як (ak+1)/2(a_k + 1) / 2, де aka_k — кількість граней на кістці. Аналогічно для кісток Боба.

  2. Порівняння шансів:
    Підсумкова сума чисел на кістках обчислюється як сума математичних сподівань для кожної з кісток. Гравець із більшою сумою математичних сподівань має більшу ймовірність виграшу.

  3. Висновок:
    Якщо сума очікувань Аліси більша, ніж Боба, вивести "ALICE". Якщо менша — "BOB". Якщо рівна — "TIED".