Напишите программу, которая случайным образом выбирает дежурных: выводит два случайных числа на отрезке [1; N], где N — количество учеников вашего класса. Какая проблема может при этом возникнуть?
Условие не очень корректно: добавлять целое число не очень интересно, например, добавлениями отрицательных чисел второй игрок может всегда оставлять после своего хода в сумме 0. Буду считать, что речь идёт о натуральных числах.
Первый игрок должен на первом ходу добавить 1, а затем после каждого своего хода оставлять число, которое даёт остаток 1 при делении на 11. Если сумма перед ходом первого игрока превысит 89, он сможет добавить недостающее до 100 и выиграть.
Эта стратегия корректна: оставлять число, дающее остаток 1 при делении на 11, легко: если второй говорит число x, первый должен говорить 11 - x. При этом второй победить не сможет: после того, как первый оставит сумму 89, после хода второго останется от 90 до 99, и следующий ход первого станет победным.
Одна из простейших игр со стратегией, разновидность игры "Ним". Игра под названием "Кто первый скажет "Сто"?" Чтобы первым достичь 100, надо заставить противника при его последнем ходе назвать число 90 до 99 - прибавив к этому числу от 10 до 1, мы выигрываем. Следовательно, при своем предпоследнем ходе, мы должны назвать число 89=100-(10+1). Перед этим надо назвать числа 89-11=78, 67, 56, 45, 34, 23, 12, 1. Начальное число 1 можно найти сразу как остаток от целочисленного деления 100 на 11. А далее делать шаги по указанным цифрам. Для этого, если противник прибавляет некое m, надо прибавлять 11-m. Или, ничего не считая, называть числа 1, 11+1=12, 12+11=32, .. 87 и 100.
В общем виде, если требуется первым назвать число N, используя числа от 1 до m, начальное число определяем, как остаток деления N на (m+1). А далее, когда противник прибавляет некое k, мы прибавляем m+1-k.
Условие не очень корректно: добавлять целое число не очень интересно, например, добавлениями отрицательных чисел второй игрок может всегда оставлять после своего хода в сумме 0. Буду считать, что речь идёт о натуральных числах.
Первый игрок должен на первом ходу добавить 1, а затем после каждого своего хода оставлять число, которое даёт остаток 1 при делении на 11. Если сумма перед ходом первого игрока превысит 89, он сможет добавить недостающее до 100 и выиграть.
Эта стратегия корректна: оставлять число, дающее остаток 1 при делении на 11, легко: если второй говорит число x, первый должен говорить 11 - x. При этом второй победить не сможет: после того, как первый оставит сумму 89, после хода второго останется от 90 до 99, и следующий ход первого станет победным.