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

Рекурсивный перевод
Напишите рекурсивную процедуру для перевода десятичного числа в P-ичную систему счисления.

В данной задаче запрещено использовать циклы и массивы.

Входные данные

На вход программе сначала подается значение P (1

👇
Ответ:
Луноцапка
Луноцапка
02.10.2022

def func(number, scale):

   if scale > number:

       return str(number)

   return func(number // scale, scale) + str(number % scale)

scale = int (input())

number = int (input())

print (str(number)+'(10)=' + str(func(number, scale)) + '(' + str(scale) + ')')

4,7(68 оценок)
Открыть все ответы
Ответ:
avramenkoviola
avramenkoviola
02.10.2022

117

Объяснение:

В цикле описан алгоритм Евклида: пока числа не равны, из большего вычитается меньшее. Известно, что в результате работы алгоритма Евклида получается наибольший общий делитель двух чисел.

Здесь ищется НОД чисел L = x - 18 и M = x + 36, и должно получиться 9. Если x - 18 делится на 9, то и x делится на 9. Наименьшее число, большее 100 и делящееся на 9, - это 108.

Проверяем:

L = 108 - 18 = 90 = 5 * 18

M = 108 + 36 = 144 = 8 * 18

Нехорошо, НОД равен 18, а не 9.

Берём следующее делящееся на 9 число, x = 117:

L = 117 - 18 = 99 = 11 * 9

M = 117 + 36 = 153 = 17 * 9

Подходит, НОД(L, M) = 9

4,8(87 оценок)
Ответ:
lena29091
lena29091
02.10.2022

Объяснение:

Введу две новые переменные: div(n, m) = a и mod(n, m) = b, где div и mod - целая часть и остаток от деления n на m.

Если в команде k человек, у них будет k (k - 1)/2 рукопожатий: каждый из k людей пожмет руку (k - 1) человеку, но каждое рукопожатие будет посчитано дважды.

Сначала порассуждаем о минимальном количестве рукопожатий. Пусть в одной группе a человек, в другой b, и a - b > 1. Тогда всего рукопожатий в этих двух группах

\dfrac{a(a-1)}2+\dfrac{b(b-1)}2

Переведём одного человека из большой группы в малую. Новое число рукопожатий

\dfrac{(a-1)(a-2)}2+\dfrac{b(b+1)}2

Считаем, на сколько изменилось общее число рукопожатий:

\left(\dfrac{(a-1)(a-2)}2+\dfrac{b(b+1)}2\right)-\left(\dfrac{a(a-1)}2+\dfrac{b(b-1)}2\right)=\\=1-(a-b)

Поскольку мы считали, что a - b > 1, то после перевода количество рукопожатий уменьшилось. Значит, для получения минимального числа рукопожатий количество людей в группах должно отличаться не более, чем на 1. Очевидно, нужно b групп сделать из a + 1 человека, а оставшиеся m - b групп сделать из a человек.

В этом случае количество рукопожатий получится равным

b\cdot\dfrac{a(a+1)}2+(m-b)\cdot\dfrac{a(a-1)}2

Теперь в другую сторону: если нужно увеличить число рукопожатий, нужно, чтобы разность между количествами людей в группах была максимальной. Рассматривая все пары по очереди, получаем, что для этого нужно во все группы, кроме одной, положить по одному человеку. Тогда во всех маленьких группах не будет ни одного рукопожатия, а в большой - ровно

\dfrac{(n-m+1)(n-m)}2

рукопожатий.

Программа (python 3):

n = int(input())

m = int(input())

a, b = divmod(n, m)

print(b * a * (a + 1) // 2 + (m - b) * a * (a - 1) // 2)

print((n - m + 1) * (n - m) // 2)

4,5(81 оценок)
Это интересно:
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ