среда, 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