Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу 1 камень или 10 камней. У каждого игрока, чтобы делать ходы, есть неограниченное количество камней. Игра завершается в тот момент, когда количество камней в куче становится не менее 31. Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу, в которой будет 31 или больше камней. В начальный момент в куче было S камней, 1 ≤ S ≤ 30.
Найдите два таких значения S, при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:
— Петя не может выиграть за один ход;
— Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Опишите выигрышную стратегию Пети для каждого найденного значения S.
Для этого надо 17 поделить на 2, и каждое последующее частное (покуда это возможно) делить на 2.
17:2=8 (остаток 1)
---
8:2=4 (остаток 0)
===
4:2=2 (остаток 0)
+++
2:2=1 (остаток 0)
*** """
Теперь с конца начинаем записывать числа, начиная с 1, потом переходим на остатки снизу вверх
1 0 0 0 1 Получается, две единицы
*** """ +++ === ---
ответ: 2
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace zn
{
class Program
{
public static void Main(string[] args)
{
Console.Write("Введите кол-во минут по тарифу: ");
int a = Convert.ToInt32(Console.ReadLine());
Console.Write("Введите цену за минуту по тарифу: ");
int b = Convert.ToInt32(Console.ReadLine());
Console.Write("Введите цену за минуту сверх тарифа: ");
int c = Convert.ToInt32(Console.ReadLine());
Console.Write("Введите время пользования услугами связи за месяц в минутах: ");
int d = Convert.ToInt32(Console.ReadLine());
int res = a > d ? a * b : a * b + (d - a) * c;
Console.WriteLine("Плата за пользование: " + res);
Console.ReadKey();
}
}
}