М
Молодежь
К
Компьютеры-и-электроника
Д
Дом-и-сад
С
Стиль-и-уход-за-собой
П
Праздники-и-традиции
Т
Транспорт
П
Путешествия
С
Семейная-жизнь
Ф
Философия-и-религия
Б
Без категории
М
Мир-работы
Х
Хобби-и-рукоделие
И
Искусство-и-развлечения
В
Взаимоотношения
З
Здоровье
К
Кулинария-и-гостеприимство
Ф
Финансы-и-бизнес
П
Питомцы-и-животные
О
Образование
О
Образование-и-коммуникации
алинка546
алинка546
28.12.2020 07:24 •  Информатика

Задача по информатике (Python) Вы купили плитку шоколада и хотите разделить ее между друзьями. Плитка шоколада представляет собой прямоугольник из прямоугольных кусочков меньшего размера NxM. Чтобы справедливо разделить его между друзьями, вы решаете полностью разбить его на N * M частей. Вы, как программист, очень заинтересовались тем, как его оптимальным образом сломать, то есть с наименьшего количества перерывов. Например, если у вас есть плитка шоколада 2x3, вы можете сначала разбить на две части размером 1x3, а затем каждый кусок отдельно на кусок 1x1. Этот оптимален и требует пяти перерывов. Зная размер плитки шоколада, вы должны определить, сколько ломтиков вам нужно в оптимальной последовательности разделения на кусочки 1х1.

Ввод
Единственная строка входных данных содержит два целых числа N и M - размер плитки шоколада. Оба числа будут в диапазоне [1; 50000]
Вывод
Ваша программа должна выдавать одну строку с минимально возможным количеством разрывов, достаточным для разделения плитки шоколада на кусочки размером 1 x 1.

👇
Ответ:
emmka1
emmka1
28.12.2020

Объяснение:

n = int(input())

res = 0

all_date = [0] * (n+1)

if n != 0 and not(n % 2):

all_date[0] = 1

all_date[2] = 3

if n > 2:

all_date[4] = 11

for i in range(6, n+1, 2):

all_date[i] = 4 *all_date[i-2] - all_date[i-4]

res = all_date[n]

print(res)

мне кажется .. сорри...

4,8(45 оценок)
Ответ:
miakakashka
miakakashka
28.12.2020

a,b = map(int, input())

print(ab-1)

4,6(43 оценок)
Открыть все ответы
Ответ:
lssurelooxx25u
lssurelooxx25u
28.12.2020
                                     PascalABC.NET                                       function ToBinary (x:integer):string; beginif (x>0) then ToBinary := ToBinary(x div 2) + (x mod 2).ToString;end; function FromBinary (x:string):integer; beginif (x.Length>0) then FromBinary := FromBinary(x.Substring(1)) + x[1].ToDigit*Round(Power(2,x.Length-1));end; function func (x:integer):integer; beginvar s := ToBinary(x); loop 2 do s += s.AsEnumerable.Sum(c->c.ToDigit) mod 2; func:=FromBinary(s);end; begin Println('f(N):',func(ReadInteger('N:'))); Println('Количество:',(1..160).Count(x->func(x) in 90..160)); end.

Примечание:

Если к числу в двоичной системе счисления приписывать в конец цифры, то число увеличивается и никак не может уменьшится. Поэтому, n<f(n). Следовательно, перебор различных чисел, принадлежащих отрезку [90;160], можно смело ставить до 160 (можно и меньше, но лень расписывать вычисления).

ToBinary - функция перевода числа из десятичной СС в двоичную. Можно писать любой алгоритм, необязательно в точности использовать мой.

FromBinary - функция перевода числа из двоичной СС в десятичную. Можно писать любой алгоритм, необязательно в точности использовать мой.

func - функция, которая выполняет преобразования числа согласно условию (пункты 1, 2, 3, 4).

Код кажется большим только из-за процедур и begin/endов. Без них - всего то 7 строчек :). В скринах можно проверить, действительно ли 19 (40-22+1).

Пример работы:


Автомат обрабатывает натуральное число N по следующему алгоритму: 1. Строится двоичная запись числа
Автомат обрабатывает натуральное число N по следующему алгоритму: 1. Строится двоичная запись числа
Автомат обрабатывает натуральное число N по следующему алгоритму: 1. Строится двоичная запись числа
4,4(51 оценок)
Ответ:
Nuriza2002
Nuriza2002
28.12.2020
                                     PascalABC.NET                                       function ToBinary (x:integer):string; beginif (x>0) then ToBinary := ToBinary(x div 2) + (x mod 2).ToString;end; function FromBinary (x:string):integer; beginif (x.Length>0) then FromBinary := FromBinary(x.Substring(1)) + x[1].ToDigit*Round(Power(2,x.Length-1));end; function func (x:integer):integer; beginvar s := ToBinary(x); loop 2 do s += s.AsEnumerable.Sum(c->c.ToDigit) mod 2; func:=FromBinary(s);end; begin Println('f(N):',func(ReadInteger('N:'))); Println('Количество:',(1..160).Count(x->func(x) in 90..160)); end.

Примечание:

Если к числу в двоичной системе счисления приписывать в конец цифры, то число увеличивается и никак не может уменьшится. Поэтому, n<f(n). Следовательно, перебор различных чисел, принадлежащих отрезку [90;160], можно смело ставить до 160 (можно и меньше, но лень расписывать вычисления).

ToBinary - функция перевода числа из десятичной СС в двоичную. Можно писать любой алгоритм, необязательно в точности использовать мой.

FromBinary - функция перевода числа из двоичной СС в десятичную. Можно писать любой алгоритм, необязательно в точности использовать мой.

func - функция, которая выполняет преобразования числа согласно условию (пункты 1, 2, 3, 4).

Код кажется большим только из-за процедур и begin/endов. Без них - всего то 7 строчек :). В скринах можно проверить, действительно ли 19 (40-22+1).

Пример работы:


Автомат обрабатывает натуральное число N по следующему алгоритму: 1. Строится двоичная запись числа
Автомат обрабатывает натуральное число N по следующему алгоритму: 1. Строится двоичная запись числа
Автомат обрабатывает натуральное число N по следующему алгоритму: 1. Строится двоичная запись числа
4,8(76 оценок)
Это интересно:
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ