Олімпіадні задачі з Python


1. Три  точки лежать на площині задані координатами А(x1, y1), B(x2, y2), C(x3,y3). Визначити, чи лежать вони на одній прямій.

Розв'язання:
Три точки лежать на одній прямій, якщо координати третьої точки задовольняють рівняння прямої, складене за координатами вершин перших двох точок. Для цього зручно користуватись таким рівнянням прямої: 

Програма на Python:
x1 = int(input('vvod x1 '))
y1 = int(input('vvod y1 '))
x2 = int(input('vvod x2 '))
y2 = int(input('vvod y2 '))
x3 = int(input('vvod x3 '))
y3 = int(input('vvod y3 '))
if (x3-x1)*(y2-y1) == (x2-x1)*(y3-y1):
    print('Точки лежать на одній прямій')
else:
    print('Точки не лежать на одній прямій')

2. Записано n трійок цілих чисел a, b, c. Вводячи їх по черзі і вважаючи сторонами трикутника, визначити, скільки цих трійок може бути використано для побудови трикутника (числа a, b, c вводяться в порядку неспадання a<=b<=c).
Розв'язання:
З трьох відрізків можна побудувати трикутник, якщо їх довжини задовольняють умову існування трикутника: довжина будь-якої сторони менша за суму довжин двох інших сторін. Справедливість цього твердження можна перевірити лише для найбільшої сторони, бо для інших сторін воно буде виконуватись автоматично. 
    Та навіть якщо невідомо, яка з сторін більша, розв'язання дещо ускладнюється, оскільки тоді мають справджуватися три схожих умови: одна зі сторін менша від суми двох інших.
Програма на Python:
k = 0
n = int(input('Скільки трійок чисел ви плануєте ввести?  '))
for i in range(n):
  a = int(input('Введіть перше число: '))
  b = int(input('Введіть друге число: '))
  c = int(input('Введіть третє число: '))
  if a < b < c:
    k = k+1
print(k)

3. Для виробництва вакцини на заводі планують вирощувати культуру бактерій. Відомо: якщо бактерій x грам, то через день їх маса збільшиться на x(a-bx) грам, де коефіцієнти a, b залежать від виду бактерій. Щодня завод забиратиме для потреб виробництва m грам бактерій. Для складання плану важливо знати, як зміниться маса бактерій через 1, 2, 3, ... 365 днів (до кінця року). Дайте відповідь на це запитання. 
Розв'язання:
Якщо у перший день маса бактерій x, то на другий день вона збільшиться на  x(a-bx), тобто становитиме x+x(a-bx). Далі процес триває циклічно впродовж 365 днів.
Програма на Python: 
a = int(input('Введіть коефіцієнт a  '))
b = int(input('Введіть коефіцієнт b  '))
x = float(input('Введіть початкову масу бактерій  x '))
m = int(input('Введіть масу бактерій для виробництва  '))
for i in range(1, 365):
  x = x + (a - b*x)*x - m
  print('Кількість бактерій на ', str(i), 'й день становив ', str(x), 'грам')

4. Івана запрошували керувати департаментом. Першого дня до нього відправили 1000 кур'єрів, а кожного наступного дня відправляли вдвічі більше, ніж попереднього. Іван погодився тоді, коли до нього прибуло відразу не менше 30000 кур'єрів. На який день це сталося?
Розв'язання:
x = 1000
i = 1
while x <= 30000:
    x = x + x 
    i = i + 1
print('Це сталося на ', i, 'день' )

(Відповідь: це сталося на 6 день)

5. Задано натуральні числа a, b, c, d, що визначають дроби a/b, c/d. Скласти алгоритм для знаходження суми a/b+c/d=m/n, де m/n нескоротний дріб.


 

Коментарі