Делим 27 монет на три кучки по 9 монет в каждой. Две любые из этих кучек сравниваем. Которая легче, та и содержит фальшивую. Если две кучки равны по весу, то фальшивая в третьей. Это первое взвешивание, по результатам которого нашли кучку из 9 монет, в которой фальшивая.
Далее кучку из 9 монет делим на три кучки по три монеты, и две любые из этих двух кучек взвешиваем. Принцип тот же, находим кучку из трёх монет, в которой фальшивая. Это второе взвешивание.
Осталось 3 монеты. Две любые из них взвешиваем, и конкретно узнаём фальшивую. Это третье взвешивание. Трёх достаточно.
Честно говоря, какой-то странный код. Во-первых, после 0 (во второй строке) должно стоять двоеточие и, во-вторых, лично у меня функции записаные с большой буквы, не работают. Как я понимаю, эта программа должна искать чётные числа от 0 до 10 (мне выдаёт 2,4,6,8,10). Она работает так: благодаря цыклу for переменной i надаётся значение от 0 до 9 (функцией range(10)). Дальше проверяется есть ли число i чётным (i%2==0). Функция not по сути делает противоположное: проверяет есть ли это число нечётным. Тогда если оно нечётнон, выводится на екран число на один больше него (т.е. чётное).
Я бы написал эту программу так:
for i in range(1, 11): if i % 2 == 0: print(i)
По сути она выводит то же самое, но код немного менше и понятней.
P.S. Эти программы не выдают в ответе 0, хотя 0 - тоже парное число. Чтобы она выдавала еще и 0, просто надо убрать первый аргумент функции range():
for i in range(11): if i % 2 == 0: print(i) Тогда она выведет 0,2,4,6,8,10.
1 - 5
2 - Тестом
3 - Формализация
Объяснение:
2 и 3 в учебнике к урокам РЭШа 100% есть, а 1 решается так:
сначала u = 50, потом следует цикл. итераций у цикла 9, с каждой итерацией i будет принимать значение от 1 до 9. расписываю каждую итерацию:
первая: i = 1, u = 50 - 1 = 49;
вторая: i = 2, u = 49 - 2 = 47;
третья: i = 3, u = 47 - 3 = 44;
четвертая: i = 4, u = 44 - 4 = 40;
пятая: i = 5, u = 40 - 5 = 35;
...
первая: i = 9, u = 14 - 9 = 5;
в итоге под конец u = 5