Уявіть собі, що ви берете участь у грі, в якій ви знаходитесь перед трьома дверима. Ведучий, про якого відомо, що він чесний, помістив за одними з дверей автомобіль, а за двома іншими — по козі. У вас немає ніякої інформації про те, за якими дверима що знаходиться. Ведучий каже вам: «Спочатку ви маєте обрати одні з дверей. Після цього я відкрию одні з дверей, які залишилися, за якими знаходиться коза. Потім я запропоную вам змінити свій початковий вибір і вибрати інші зачинені двері замість тих, що ви вибрали спочатку. Ви можете зробити як я раджу, або підтвердити свій початковий вибір. Після вашого остаточного рішення я відкрию двері, які ви вибрали, і ви виграєте те, що знаходиться за цими дверима.»
Наприклад, Ви обираєте двері номер 1.
Ведучий відчиняє двері номер 3 і показує, що за ними знаходиться коза.
Після цього ведучий пропонує вам змінити свій вібір і обрати двері номер 2.
Чи збільшаться ваші шанси виграти автомобіль, якщо ви послухаєте його?
Будь ласка, подумайте, а лише потім, дайте відповідь на запитання:
Чи варто для виграшу автомобіля послухати ведучого і змінити свій попередній вибір?
from turtle import * speed(0) penup() left(90) for x in range(-400, 500, 100): if x % 200 == 0: setposition(x, -200) else: setposition(x, -150) for size in range(140, 10, -30): dot(size) forward(size + 10)
Буває так, що задача нескладна, але умова не відразу є зрозумілою. І тоді звичайний графічний аналіз дуже допомогає розв’язанню. Пропоную розібрати задачу «Гра з перемикачами» https://www.e-olymp.com/uk/problems/335
Умова: Є нескінченна кількість ламп, що знаходяться у вимкненому стані. На кожному етапі гри вмикаються (якщо вони були вимкнені) або вимикаються (якщо вони були увімкнені) всі ті лампи, номери яких кратні номеру етапу гри.
Задача: Визначити стан n-ої лампи після n-го етапу гри.
Вхідні дані У першому рядку задано кількість тестів t (1 ≤ t ≤ 10). Далі йде t рядків з номером n (0 < n ≤ 105) етапу гри.
Вихідні дані Вивести t рядків зі станами відповідних ламп: 0 - лампу вимкнено, 1 - увімкнуто.
Ліміт часу 1 секунда Ліміт використання пам'яті 128 MiB
Приклад вхідних даних: 2 1 5
Приклад вихідних даних: 1 0
Розв’яжемо задачу графічно. Візьмемо, наприклад, деяку кількість ламп і проаналізуємо їх стан під час проходження етапів гри. На старті гри всі лампи вимкнені, згідно умови.
Після першого етапу всі лампи ввімкнуться, тому що будь-яке число кратне одиниці, тобто націло ділиться на одиницю.
Після другого етапу гри всі лампи, номери яких кратні двом, змінять свій стан. Оскільки після першого етапу всі лампи увімкнені, то лампи з парними номерами вимкнуться.
Ось як можна графічно показати стан ламп після другого етапу гри, жовтий колір – це лампи, що світяться, чорні - вимкнені:
Далі можна аналогічно розписати стан наших 17 ламп після проходження етапів гри і окремо проаналізувати, який стан матиме кожна лампа після чергового етапу:
З нашого прикладу бачимо, що відповідні лампи залишаються увімкненими після 1, 4, 9 і 16 етапів гри, відповідно, в тих випадках, коли квадратний корінь з номера етапу (відповідно, і номера лампи) – ціле число.
Код – питання другорядне, ось один з варіантів на Python:
from math import sqrt t = int(input()) for _ in range(t): n = int(input()) if sqrt(n) == int(sqrt(n)): print(1) else: print(0)
У даному випадку графічний аналіз значно допоміг нам знайти логіку і розв'язок.
from turtle import * speed(0) pensize(5) for x in range(20): if x < 5: color('maroon') elif x < 10: color('orange') elif x < 15: color('navy') else: color('crimson') circle(120) left(18)
У восьми рядках коду про роботу з числами в шістнадцятковій системі і кольорах:
from turtle import color, dot for red in range(0x11, 0x100, 0x33): for green in range(0x11, 0x100, 0x33): for blue in range(0x11, 0x100, 0x33): c = red * 0x10000 + green * 0x100 + blue print('#' + '%x' % c) color('#%06x' % c) dot(80)