Деление до конца без штрафов возможно, если количество орехов в кучке будет какой-либо степенью двойки (2, 4, 8, 16, 32, 64, 128, 256, 512). Число 1057 - нечетно, следовательно, его можно представить <четное>+<нечетное>. При делении 1056+1 получим первый штраф. Число 1056 не является степенью двойки, поэтому необходимо опять поделить орехи на неравные кучки: 1024+32 (второй штраф). 1024 и 32 - степени двойки, значит дальнейшее разделение можно выполнить без штрафов. Можно делить, например, так: 1. 1024 и 33 ореха (штраф 1 рубль) 2. 33 делим на 2 кучки: 32 и 1 (штраф 1 рубль) 3 и все следующие операции: кучки из 1024 и 32 орехов делим на равные кучки (1024: 512 и 512, 512: 256 и 256, 256: 128 и 128, 128: 64 и 64, 64: 32 и 32, 32: 16 и 16 и т.д.). Получаем, что минимальная сумма штрафа = 2 рубля.
На псевдокоде: 1. Сначала нам нужно ввести с клавиатуры три числа. 2. Когда ввели, присваиваем переменной max значение a. Предположим, что большее значение в a, и дальше по программе будем проверять это. max := a. 3. Проверяем, b > max? Если да, то присваиваем переменной max значение b. 4. Проверяем, max < c? Если да, то присваиваем max значение c. 5. Выводим max.
Реализация Basic:
INPUT a INPUT b INPUT c max = a IF b > max THEN max = b IF max < c THEN max = c PRINT max END
C#:
Внутри главного метода.
int max; int a = int.Parse(Console.ReadLine()); int b = int.Parse(Console.ReadLine()); int c = int.Parse(Console.ReadLine()); max = a;
if (b > max) { max = b; }
if (max < c){ max = с; }
Console.WriteLine(max); Console.ReadLine(); //чтобы программа не закрывалась сразу после выполнения
Можно делить, например, так:
1. 1024 и 33 ореха (штраф 1 рубль)
2. 33 делим на 2 кучки: 32 и 1 (штраф 1 рубль)
3 и все следующие операции: кучки из 1024 и 32 орехов делим на равные кучки (1024: 512 и 512, 512: 256 и 256, 256: 128 и 128, 128: 64 и 64, 64: 32 и 32, 32: 16 и 16 и т.д.).
Получаем, что минимальная сумма штрафа = 2 рубля.
На псевдокоде:
1. Сначала нам нужно ввести с клавиатуры три числа.
2. Когда ввели, присваиваем переменной max значение a. Предположим, что большее значение в a, и дальше по программе будем проверять это. max := a.
3. Проверяем, b > max? Если да, то присваиваем переменной max значение b.
4. Проверяем, max < c? Если да, то присваиваем max значение c.
5. Выводим max.
Реализация Basic:
INPUT a
INPUT b
INPUT c
max = a
IF b > max THEN max = b
IF max < c THEN max = c
PRINT max
END
C#:
Внутри главного метода.
int max;
int a = int.Parse(Console.ReadLine());
int b = int.Parse(Console.ReadLine());
int c = int.Parse(Console.ReadLine());
max = a;
if (b > max)
{
max = b;
}
if (max < c){
max = с;
}
Console.WriteLine(max);
Console.ReadLine(); //чтобы программа не закрывалась сразу после выполнения