🐍 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Відповідь:
162. 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дорівнює:
326. Nhex — Переведення в десяткову систему
Дано число в системі числення з основою m, де:
2 ≤ m ≤ 16Потрібно перевести його в десяткову систему.
Приклад
Введення:
16
FFFF
Виведення:
65535Python уже має функцію для такого перетворення:
int(рядок, основа)Розв'язок
m = int(input())
Ch = input()
answer = int(Ch, m)
print(answer)Наприклад:
print(int("1010", 2))отримаємо:
10А:
print(int("FF", 16))дасть:
2557. 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 хвПовних хвилин:
49. 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]Також познайомилися з:
арифметичною прогресією;
циклами;
умовами;
списками;
підрахунком кількості елементів;
роботою з рядками;
системами числення;
остачею від ділення;
цілочисельним діленням;
степенем;
пошуком максимального відрізка;
математичним моделюванням.
🚀 Наступний крок
Спробуйте змінити кожну програму або написати альтернативний варіант розв'язання.
Головна мета — не просто отримати правильну відповідь, а зрозуміти алгоритм.
Успіхів у програмуванні! 🐍💻

Немає коментарів:
Дописати коментар