пятница, 12 декабря 2025 г.

 c++

76

#include <iostream>

#include <algorithm>

using namespace std;

int main() {

    double a, b, x, y, z;

    cin >> a >> b >> x >> y >> z;

    // впорядкуємо двері: a ≤ b

    if (a > b) swap(a, b);

    bool ok = false;

    // всі пари розмірів шафи

    double p[3] = {x, y, z};

    // перебираємо всі комбінації двох розмірів із трьох

    for (int i = 0; i < 3; i++) {

        for (int j = i + 1; j < 3; j++) {

            double w = p[i], h = p[j];

            // впорядкуємо пару: w ≤ h

            if (w > h) swap(w, h);


            if (w <= a && h <= b) ok = true;

        }

    }

    cout << (ok ? 1 : 0);

 }

4716
#include <iostream>

int main() {
  
    int n, k; 
   
    if (!(std::cin >> n >> k)) return 0;
      int apples_per_student = k / n; 
   
    std::cout << apples_per_student << std::endl;

}
4717

#include <iostream>

int main() {
   
    int n, k; 

    if (!(std::cin >> n >> k)) return 0;
    
    int remainder_apples = k % n; 

    std::cout << remainder_apples << std::endl;
}

4718
#include <iostream>
#include <string>

int main() {
      std::string name;
    if (!(std::cin >> name)) return 0;

     std::cout << "Hello, " << name << std::endl;
}

4719

#include <iostream>


int main() {

    // Оголошуємо змінні для координат:

    // r1, c1 - рядок та стовпець тури

    // r2, c2 - рядок та стовпець іншої фігури

    int r1, c1, r2, c2;


    // Введення чотирьох координат

    // r1

    if (!(std::cin >> r1)) return 0;

    // c1

    if (!(std::cin >> c1)) return 0;

    // r2

    if (!(std::cin >> r2)) return 0;

    // c2

    if (!(std::cin >> c2)) return 0;

    // Тура б'є фігуру, якщо їхні рядки збігаються (r1 == r2) 

    // АБО їхні стовпці збігаються (c1 == c2).

    if (r1 == r2 || c1 == c2) {

        std::cout << "YES" << std::endl;

    } else {

        std::cout << "NO" << std::endl;

    }

   }

4720

Сергійко буде щасливий ("HAPPY"), якщо обрана точка:

Належить чорному прямокутнику.

НЕ належить білому прямокутнику.

Інакше Сергійко буде засмучений ("SAD").

#include <stdio.h>

int main(void)
{
int x1,x2,x3,x4,y1,y2,y3,y4,x0,y0;
scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
scanf("%d %d %d %d",&x3,&y3,&x4,&y4);
scanf("%d %d",&x0,&y0);
if ((x3 < x0)  && (x0 < x4)  && (y4 < y0)  && (y0 < y3))
  printf("SAD\n");
else if ((x1 <= x0) && (x0 <= x2) && (y2 <= y0) && (y0 <= y1))
  printf("HAPPY\n");
else printf("SAD\n"); 
}

4721

Для розв'язання цієї задачі вам потрібно порахувати, скільки разів цифра "5" зустрічається у номері квитка (n).

#include <iostream>

int main() {

    // n - номер квитка

    int n; 

        if (!(std::cin >> n)) return 0;

  

    int count = 0; 

    // Обробляємо число n, доки воно не стане нулем

    while (n > 0) {

             int digit = n % 10; 

        if (digit == 5) {

            count++; // Збільшуємо лічильник

        }

        n = n / 10; 

    }

    std::cout << count << std::endl;

}

4722

#include <iostream>

#include <string>

#include <vector>

#include <algorithm>


using namespace std;


// Функція для множення двох великих чисел, представлених рядками.

// Повертає результат множення як рядок.

string multiply_big_numbers(string num1, string num2) {

    int len1 = num1.length();

    int len2 = num2.length();

    

    // Якщо хоча б одне число 0, результат - "0"

    if (len1 == 0 || len2 == 0)

        return "0";


    // Вектор для зберігання результату множення. 

    // Розмір: len1 + len2 (максимально можлива кількість цифр)

    vector<int> result(len1 + len2, 0);


    // Індекси для відстеження позицій у result

    int i_n1 = 0;

    int i_n2 = 0;


    // Перебираємо цифри першого числа (num1) справа наліво

    for (int i = len1 - 1; i >= 0; i--) {

        int carry = 0;

        // Перетворюємо символ на цифру

        int n1 = num1[i] - '0';

        

        i_n2 = 0;

        

        // Перебираємо цифри другого числа (num2) справа наліво

        for (int j = len2 - 1; j >= 0; j--) {

            // Перетворюємо символ на цифру

            int n2 = num2[j] - '0';


            // Множення, додавання результату з попереднього розряду та перенесення

            int sum = n1 * n2 + result[i_n1 + i_n2] + carry;


            // Перенесення для наступної ітерації

            carry = sum / 10;


            // Зберігаємо останню цифру суми

            result[i_n1 + i_n2] = sum % 10;


            i_n2++;

        }


        // Зберігаємо останнє перенесення

        if (carry > 0)

            result[i_n1 + i_n2] += carry;


        i_n1++;

    }


    // Формуємо фінальний рядок результату


    // Визначаємо позицію першої ненульової цифри (видаляємо нулі на початку)

    int i = result.size() - 1;

    while (i >= 0 && result[i] == 0)

        i--;


    // Якщо всі цифри - нулі (наприклад, 0 * 5)

    if (i == -1)

        return "0";


    // Створюємо рядок результату

    string s = "";

    while (i >= 0)

        s += to_string(result[i--]);


    return s;

}


int main() {

    // Швидке введення/виведення

    ios_base::sync_with_stdio(false);

    cin.tie(NULL);


    int n_int, k_int;

    

    // Введення N

    if (!(cin >> n_int)) return 0;

    

    // Введення K

    if (!(cin >> k_int)) return 0;


    // Обробка крайнього випадку: якщо n = 0, то n повторене k разів - це 0. 0^2 = 0.

    if (n_int == 0) {

        cout << 0 << endl;

        return 0;

    }


    // 1. Формування великого числа X

    string n_str = to_string(n_int);

    string X = "";

    for (int i = 0; i < k_int; ++i) {

        X += n_str;

    }

    // 2. Піднесення до квадрату: X * X

    string result = multiply_big_numbers(X, X);

    // Виведення результату

    cout << result << endl;

 }

4740

#include <iostream>

#include <vector>

#include <algorithm>


using namespace std;


int main() {

    // Швидке введення/виведення

    ios_base::sync_with_stdio(false);

    cin.tie(NULL);


    int N; // Кількість мешканців

    

    // Введення N

    if (!(cin >> N)) return 0;


    // Створюємо вектор для підрахунку частоти віку. 

    // Розмір 1001 для віку від 0 до 1000 включно.

    vector<int> counts(1001, 0);


    int age;

    // 1. Підрахунок частоти

    for (int i = 0; i < N; ++i) {

        if (!(cin >> age)) return 0;

        

        // Перевірка на діапазон (хоча за умовою це гарантовано)

        if (age >= 0 && age <= 1000) {

            counts[age]++;

        }

    }


    // 2. Пошук моди (віку з максимальною частотою)

    int max_count = -1;

    int mode_age = -1; // Змінна для зберігання віку-моди


    // Проходимо по масиву віку від 0 до 1000. 

    // Це ГАРАНТУЄ, що у випадку однакової частоти буде обрано НАЙМЕНШИЙ вік.

    for (int current_age = 0; current_age <= 1000; ++current_age) {

        // Отримуємо частоту поточного віку

        int current_count = counts[current_age];

        

        // Якщо поточна частота більша за максимальну, оновлюємо максимум та вік

        if (current_count > max_count) {

            max_count = current_count;

            mode_age = current_age;

        }

        // Умова "current_count == max_count" тут не перевіряється, 

        // оскільки нам потрібен лише найменший вік.

    }


    // 3. Виведення результату

    cout << mode_age << endl;


    return 0;

}



среда, 10 декабря 2025 г.

 c++

358

Кількість сегментів для кожної цифри:

0 → 6 1 → 2 2 → 5 3 → 5 4 → 4 5 → 5 6 → 6 7 → 3 8 → 7 9 → 6

#include <iostream> #include <string> using namespace std; int main() { string N; cin >> N; int leds[] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6}; long long result = 0; for (char c : N) { result += leds[c - '0']; } cout << result; return 0; }

Програма читає число як рядок, потім для кожної цифри додає відповідну кількість LED-сегментів.

Приклад

Вхід:

123

Обчислення:
1 → 2
2 → 5
3 → 5
Разом: 2 + 5 + 5 = 12

Вихід:

12

359
  • Знайдемо відстань dd від центра кола C(x,y)C(x,y) до прямої через точки P1(x1,y1)P_1(x_1,y_1) і P2(x2,y2)P_2(x_2,y_2) (формула через модуль векторного добутку / довжина вектора).

  • Якщо d>Rd>R — пряма не перетинає коло → виводимо -1.

  • Якщо dRd \approx R — дотикається → виводимо 0.00000.

  • Інакше довжина відрізка всередині кола = 2R2d22\sqrt{R^2 - d^2}.

Програма (вивід з точністю 5 знаків після крапки; при відсутності перетину — -1):

#include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); double R, xc, yc, x1, y1, x2, y2; if (!(cin >> R >> xc >> yc >> x1 >> y1 >> x2 >> y2)) return 0; const double EPS = 1e-12; // Випадок, коли дві точки співпадають (дефект даних) — обробимо окремо. double dx = x2 - x1; double dy = y2 - y1; if (fabs(dx) < EPS && fabs(dy) < EPS) { // пряма не визначена; розглянемо точку P1 double distP = hypot(x1 - xc, y1 - yc); if (distP > R + 1e-9) { cout << "-1\n"; } else if (fabs(distP - R) <= 1e-9) { cout.setf(ios::fixed); cout << setprecision(5) << 0.0 << "\n"; } else { // точка всередині кола — за умовою пряма не визначена, виведемо 0.00000 cout.setf(ios::fixed); cout << setprecision(5) << 0.0 << "\n"; } return 0; } // Відстань від центра до прямої: |(P2-P1) x (P1-C)| / |P2-P1| double cross = fabs(dx * (y1 - yc) - dy * (x1 - xc)); double len = hypot(dx, dy); double d = cross / len; if (d > R + 1e-9) { cout << "-1\n"; } else if (fabs(d - R) <= 1e-9) { cout.setf(ios::fixed); cout << setprecision(5) << 0.0 << "\n"; } else { double inside = 2.0 * sqrt(max(0.0, R * R - d * d)); cout.setf(ios::fixed); cout << setprecision(5) << inside << "\n"; } return 0; }

571
#include <iostream> #include <algorithm> using namespace std; long long gcd(long long a, long long b) { while (b != 0) { long long t = a % b; a = b; b = t; } return a; } int main() { int n; cin >> n; long long x; cin >> x; // перше число long long g = x; for (int i = 1; i < n; i++) { cin >> x; g = gcd(g, x); } cout << g; return 0; }

572

перебираємо дільники до √n, для кожного — рахуємо степінь,
наприкінці, якщо n > 1, додаємо його як простий дільник.

#include <iostream> using namespace std; int main() { long long n; cin >> n; bool first = true; for (long long p = 2; p * p <= n; p++) { if (n % p == 0) { int cnt = 0; while (n % p == 0) { n /= p; cnt++; } if (!first) cout << "*"; first = false; cout << p; if (cnt > 1) cout << "^" << cnt; } } // Якщо після всіх поділів n > 1 → це простий дільник if (n > 1) { if (!first) cout << "*"; cout << n; } return 0; }


662

Податок = 1% від D
Тобто:

  • Якщо D кратне 100 → відповідь = D / 100

  • Інакше → відповідь = D / 100 + 1
    Оскільки D може мати до 200 цифр, використовуємо рядки й ділимо вручну.

#include <iostream> #include <string> using namespace std; int main() { string D; cin >> D; string result; int carry = 0; // Ділимо число D на 100 (тобто на 10 і ще раз на 10) // Реалізуємо поділ на 100 одразу for (char c : D) { int cur = carry * 10 + (c - '0'); result.push_back(char(cur / 100 + '0')); carry = cur % 100; } // Прибрати провідні нулі int pos = 0; while (pos < (int)result.size() && result[pos] == '0') pos++; if (pos == (int)result.size()) result = "0"; else result = result.substr(pos); // Якщо було неціле ділення, округлюємо вгору if (carry != 0) { // додаємо 1 до result int i = result.size() - 1; while (i >= 0 && result[i] == '9') { result[i] = '0'; i--; } if (i >= 0) result[i]++; else result = "1" + result; } cout << result; return 0; }






пятница, 5 декабря 2025 г.

 c++

20

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

Вхідні дані

Одне ціле число  ().

Вихідні дані

Виведіть кількість виконаних операцій.

Приклади

Вхідні дані #1
21
Відповідь #1
3


#include <bits/stdc++.h>

using namespace std;

long long sumDigits(long long x) {

    long long s = 0;

    while (x > 0) {

        s += x % 10;

        x /= 10;

    }

    return s;

}

int main() {

    ios::sync_with_stdio(false);

    cin.tie(nullptr);

    long long n;

    cin >> n;


    int steps = 0;

    while (n > 0) {

        n -= sumDigits(n);

        steps++;

    }

    cout << steps;

}

108

Дано три цілі числа , кожне з яких задовольняє .

Вхідні дані

Дано три цілі числа , кожне з яких задовольняє .


Виведіть середнє за значенням серед трьох чисел.

#include <bits/stdc++.h>

using namespace std;

int main() {

    int a, b, c;

    cin >> a >> b >> c;

    int arr[3] = {a, b, c};

    sort(arr, arr + 3);

    cout << arr[1]; // середнє за значенням (медіана)

    return 0;

}

109

Щоб пронумерувати  сторінок у книжці, використовується всього  цифр. За заданим  визначте число сторінок , якщо таке  існує; інакше виведіть 0. Нумерація починається з першої сторінки.

Вхідні дані

У вхідних даних одне ціле число . У книзі не більше  сторінок.

Вихідні дані

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

Приклади

Вхідні дані #1
27
Відповідь #1
18

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

int digitsCount(int x) {
    int cnt = 0;
    while (x > 0) {
        cnt++;
        x /= 10;
    }
    return cnt;
}

int main() {

    long long n;
    cin >> n;
    long long digits = 0;
    for (int m = 1; m <= 7000; ++m) {
        digits += digitsCount(m);
        if (digits == n) {
            cout << m;
            return 0;
        }
        if (digits > n) break;
    }
    cout << 0; // якщо жодне m не підійшло
    return 0;
}
110

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

int main() {
  
    int N;
    cin >> N;
    vector<bool> win(N + 1, false); // win[i] = true, якщо гравець, що ходить може виграти
    win[1] = false; // 1 камінь не можна розділити

    for (int n = 2; n <= N; ++n) {
        for (int a = 1; a < n; ++a) {
            int b = n - a;
            if (a != b && !win[b]) {
                win[n] = true;
                break;
            }
        }
    }

    // Тепер знайдемо перший хід
    int firstMove = 0;
    for (int a = 1; a < N; ++a) {
        int b = N - a;
        if (a != b && !win[b]) {
            firstMove = a;
            break;
        }
    }
    cout << firstMove << '\n';

}
111

Годинник з боєм кожної повної години б’є стільки разів, яка цифра вказується на циферблаті (від  до ), а також один раз, коли хвилинна стрілка показує на .

Вхідні дані

У вхідних даних вказано початковий та кінцевий час у межах однієї календарної доби, в годинах () і хвилинах (), через пропуск, де .

Вихідні дані

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

Приклади

Вхідні дані #1
13 30 15 10
Відповідь #1
7

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

int main() {

    int H1, M1, H2, M2;
    cin >> H1 >> M1 >> H2 >> M2;

    int start = H1 * 60 + M1;
    int end = H2 * 60 + M2;

    int total = 0;
    for (int t = start; t <= end; ++t) {
        int H = t / 60;
        int M = t % 60;

        if (M == 0) {
            int hour_on_clock = H % 12;
            if (hour_on_clock == 0) hour_on_clock = 12;
            total += hour_on_clock;
        } else if (M == 30) {
            total += 1;
        }
    }

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

112

На честь дня народження спадкоємця Тутті королівський кухар приготував величезний святковий торт, який подали Трьом Товстунам. Перший товстун міг з’їсти весь торт сам за  годин, другий — за  годин, а третій — за  годин.

Скільки часу потрібно товстунам, щоб разом з’їсти весь торт?

Вхідні дані

В єдиному рядку задано три невід'ємних цілих числа  та , кожне з яких не перевищує .

Вихідні дані

Виведіть час у годинах, за який троє товстунів разом з’їдять торт. Округліть результат до двох знаків після коми.

Приклади

Вхідні дані #1
3 3 3
Відповідь #1
1.00

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

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    double t1, t2, t3;
    cin >> t1 >> t2 >> t3;

    double totalSpeed = 0;
    if (t1 > 0) totalSpeed += 1.0 / t1;
    if (t2 > 0) totalSpeed += 1.0 / t2;
    if (t3 > 0) totalSpeed += 1.0 / t3;

    double T;
    if (totalSpeed > 0)
        T = 1.0 / totalSpeed;
    else
        T = 0; // якщо всі t_i = 0 (неможливо, але для безпеки)

    cout << fixed << setprecision(2) << T << '\n';

    return 0;
}
113

У продавця повітряних кульок є  кульок. Кожна кулька має певний колір. Нещодавно Три Товстуни видали указ, що дозволяє продавати кульки лише одного кольору. Щоб не порушувати закон і не втратити прибуток, продавець вирішив перефарбувати частину кульок.

Вхідні дані

У першому рядку задано кількість кульок  ().

У другому рядку задано  цілих чисел від  до  — кольори кульок: — синій — зелений — блакитний — червоний — рожевий — жовтий — сірий — чорний — білий

Вихідні дані

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

Приклади

Вхідні дані #1
4
3 1 2 1

Відповідь #1
2
Вхідні дані #2
4
4 9 9 6
Відповідь #2
2
#include <bits/stdc++.h>
using namespace std;
int main() {

    int n;
    cin >> n;
    vector<int> count(10, 0); // кольори від 1 до 9

    for (int i = 0; i < n; ++i) {
        int color;
        cin >> color;
        count[color]++;
    }

    int max_count = *max_element(count.begin() + 1, count.end());
    cout << n - max_count << '\n';

    return 0;
}
115