четвер, 1 жовтня 2026 р.

Тренувальний тур NetOI: розв'язуємо перші 10 задач мовою Python

 

🐍 NetOI: перші 10 задач тренувального туру мовою Python


Починаємо знайомство з олімпіадним програмуванням!



Thonny — найкраще для навчання і початківців. Він особливо зручний для учнів: простий інтерфейс, Python ставиться разом із програмою, легко запускати код клавішею F5, добре видно помилки, є покрокове виконання. 

Спочатку скачайт на свій ПК => Thonny https://thonny.org/

або такі онлайн-середовища:

  • Programiz Online Python Compiler — найпростіший варіант для уроку: вставив код → Run → отримав результат. Підходить для всіх перших задач NetOI.
  • OnlineGDB Python — зручний для олімпіадних задач, особливо коли потрібно вводити тестові дані через input().
  • Replit — функціональніший: можна зберігати проєкти й працювати з кількома файлами, але для простих задач трохи перевантажений.

Тепер далі..


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

У цьому матеріалі розберемо перші 10 задач та наведемо їхні готові розв'язки мовою Python із поясненнями.

Як правильно тренуватися

Найгірший спосіб навчитися програмувати — просто скопіювати готовий код.

Краще працювати так:

1. Прочитай умову задачі.

2. Спробуй придумати алгоритм самостійно.

3. Напишіть власну програму, збережи код на комп’ютер під назвою: 

Circle.py (або іншу назву програми)

4. Перевір її  на ПК, а потім в режимі online:





5. Якщо не виходить — переглянь пояснення технічні умови.

6. І лише після цього подивись готовий код.

7. Спробуй ще раз


1. Circle — Кола

Умова

Василько малює кола з центра квадратної кімнати.

Діаметри кіл утворюють послідовність:

10, 30, 40, 60, 70, 90, 100, 120...

Вводиться довжина сторони кімнати M у сантиметрах.

Потрібно визначити, скільки повних кіл можна намалювати.

Наприклад:

Введення:
240

Виведення:
16

Розбираємо закономірність

Діаметри йдуть парами:

10, 30
40, 60
70, 90
100, 120
...

Кожні 30 см дають два нових кола.

Тому кількість повних пар:

M // 30

Кожна пара містить два кола:

2 * (M // 30)

Якщо залишилося хоча б 10 см, поміщається ще одне коло.

Розв'язок Python

M = int(input())

answer = 2 * (M // 30)

if M % 30 >= 10:
    answer += 1

print(answer)

Для 240:

240 // 30 = 8
8 * 2 = 16

Відповідь:

16

2. Leopold — Риболовля кота Леопольда

Перша риба має масу L грамів.

Кожна наступна важча за попередню на K грамів.

Всього спіймано N риб.

Потрібно знайти їхню загальну масу.

Приклад

Введення:
10 250 100

Виведення:
7000

Маси риб:

250
350
450
550
650
750
850
950
1050
1150

Розв'язок Python

N, L, K = map(int, input().split())

total = 0

for i in range(N):
    total += L + i * K

print(total)

Пояснення

Цикл:

for i in range(N):

виконається N разів.

Маса кожної наступної риби:

L + i * K

А команда:

total += ...

додає її до загальної маси.


3. Slon — Рахуємо слоненят

Є слоненята 8 кольорів.

Кольори позначено числами:

1 2 3 4 5 6 7 8

Потрібно визначити кількість слоненят кожного кольору.

Приклад

Введення:
12 1 1 2 3 3 1 5 6 8 7 6 5

Результат:

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

Тобто:

колір 1 → 3
колір 2 → 1
колір 3 → 2
колір 4 → 0
...

Розв'язок Python

data = list(map(int, input().split()))

N = data[0]
colors = data[1:]

count = [0] * 9

for color in colors:
    count[color] += 1

for color in range(1, 9):
    print(color, count[color], end=" ")

Навіщо 9 елементів?

Створюємо:

count = [0] * 9

щоб номер кольору збігався з номером елемента списку:

count[1] — колір 1
count[2] — колір 2
...
count[8] — колір 8

Це класичний приклад підрахунку частоти значень.


4. Vinni — Вінні-Пух

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

Наприклад:

роза

перетворюється на:

азор

Розв'язок Python

text = input()

print(text[::-1])

І все!

Що означає [::-1]?

Це зріз рядка із кроком -1.

Наприклад:

text = "Python"
print(text[::-1])

отримаємо:

nohtyP

Це один із дуже зручних прийомів Python.


5. Worms — Черв'ячки

Спочатку є два черв'ячки.

Через кожні 10 хвилин їхня кількість подвоюється:

0 хв  → 2
10 хв → 4
20 хв → 8
30 хв → 16
40 хв → 32

Потрібно визначити їхню кількість через N хвилин.

Розв'язок Python

N = int(input())

k = N // 10

worms = 2 * (2 ** k)

print(worms)

Пояснення

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

k = N // 10

Наприклад:

48 // 10 = 4

Отже, кількість подвоїлася 4 рази:

2 → 4 → 8 → 16 → 32

Тому:

2 * 2 ** 4

дорівнює:

32

6. Nhex — Переведення в десяткову систему

Дано число в системі числення з основою m, де:

2 ≤ m ≤ 16

Потрібно перевести його в десяткову систему.

Приклад

Введення:
16
FFFF

Виведення:
65535

Python уже має функцію для такого перетворення:

int(рядок, основа)

Розв'язок

m = int(input())
Ch = input()

answer = int(Ch, m)

print(answer)

Наприклад:

print(int("1010", 2))

отримаємо:

10

А:

print(int("FF", 16))

дасть:

255

7. Hex — З десяткової системи

Тепер виконуємо зворотну операцію.

Дано десяткове число Ch.

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

2 ≤ m ≤ 16

Приклад

Введення:
16
1024

Виведення:
400

Розв'язок Python

m = int(input())
Ch = int(input())

digits = "0123456789ABCDEF"

if Ch == 0:
    print(0)
else:
    result = ""

    while Ch > 0:
        remainder = Ch % m
        result = digits[remainder] + result
        Ch //= m

    print(result)

Як працює алгоритм?

Беремо остачу:

Ch % m

після цього ділимо число:

Ch //= m

Наприклад, число 15 у шістнадцятковій системі записується:

F

Тому використовуємо:

digits = "0123456789ABCDEF"

8. Clock — Годинник

Годинна та хвилинна стрілки рухаються з різною швидкістю.

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

Приклад

Введення:
1 1

Виведення:
4

Швидкість стрілок

Хвилинна стрілка:

6° за хвилину

Годинна:

0,5° за хвилину

Відносна швидкість:

6 - 0,5 = 5,5°/хв

Розв'язок Python

h, m = map(int, input().split())

hour_angle = (h % 12) * 30 + m * 0.5
minute_angle = m * 6

difference = (hour_angle - minute_angle) % 360

time = difference / 5.5

print(int(time))

Для 1:01

Годинна стрілка:

30 + 0,5 = 30,5°

Хвилинна:

6°

Відстань:

30,5 - 6 = 24,5°

Час:

24,5 / 5,5 ≈ 4,45 хв

Повних хвилин:

4

9. NewCircle — Максимальна сума

Незважаючи на назву, ця задача вже не про кола.

Дано послідовність цілих чисел.

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

початок кінець сума

Приклад

Введення:
5 1 2 -3 3 0

Відрізок:

1 2

зростає:

1 < 2

і має суму:

1 + 2 = 3

Результат:

1 2 3

Розв'язок Python

data = list(map(int, input().split()))

N = data[0]
a = data[1:]

current_sum = a[0]
current_start = 0

best_sum = a[0]
best_start = 0
best_end = 0

for i in range(1, N):

    if a[i] > a[i - 1]:

        if current_sum + a[i] >= a[i]:
            current_sum += a[i]
        else:
            current_sum = a[i]
            current_start = i

    else:
        current_sum = a[i]
        current_start = i

    if current_sum > best_sum:
        best_sum = current_sum
        best_start = current_start
        best_end = i

print(best_start + 1, best_end + 1, best_sum)

Що тут відбувається?

Перевіряємо:

a[i] > a[i - 1]

Якщо так — послідовність продовжує зростати.

Але нам потрібна не просто найдовша послідовність, а максимальна сума.

Тому іноді вигідніше почати новий відрізок із поточного числа.

Зверніть увагу:

best_start + 1
best_end + 1

У Python індекси починаються з 0, а в задачі нумерація елементів починається з 1.


10. Cube — Куб

Дано довжину ребра куба a.

Потрібно знайти:

  • об'єм куба;

  • площу всієї поверхні.

Формули

Об'єм:

V = a³

Площа поверхні:

S = 6a²

Розв'язок Python

a = int(input())

V = a ** 3
S = 6 * a ** 2

print(V, S)

Приклад

Для:

4

об'єм:

4³ = 64

площа:

6 × 4² = 6 × 16 = 96

Результат:

64 96

🧠 Що ми вивчили?

Усього 10 невеликих задач, а ми вже використали:

input()
print()
int()
map()
list()

if
else

for
while

range()

+
-
*
/
//
%
**

text[::-1]

Також познайомилися з:

  • арифметичною прогресією;

  • циклами;

  • умовами;

  • списками;

  • підрахунком кількості елементів;

  • роботою з рядками;

  • системами числення;

  • остачею від ділення;

  • цілочисельним діленням;

  • степенем;

  • пошуком максимального відрізка;

  • математичним моделюванням.



🚀 Наступний крок

Спробуйте змінити кожну програму або написати альтернативний варіант розв'язання.

Головна мета — не просто отримати правильну відповідь, а зрозуміти алгоритм.

Успіхів у програмуванні! 🐍💻

Немає коментарів:

Дописати коментар