Статья Автор: Лебедев Дмитрий

TUZ_2-09 Группировка монет

TUZ_2-09  Группировка монет
Задача 52153

TUZ_2-09  Группировка монет
2.09  Группировка монет
В этой задаче дан массив из n одинаковых монет, который необходимо разделить на g групп,
где g – положительное целое число, большее или равное единице.
Если после формирования полных групп остаются какие- либо монеты,
то оставшиеся монеты в массиве откладываются и сохраняются.
Для вычисления количества монет в каждой группе используется формула n//g ∗ c.
Процесс группировки повторяется, пока все монеты не будут учтены.
Ваша задача – написать функцию, которая принимает три входных параметра:
n (общее количество монет), g (количество групп) и c (количество монет в одной группе) –
и возвращает массив, содержащий количество монет, оставшихся на каждом этапе группировки.
Если n = 0, то функция должна вернуть пустой список.
Например, пусть n = 10, g = 3 и c = 2.
  • Следующая последовательность показывает оставшиеся монеты на каждом этапе группировки:
    10, 3, 2 → 1; 6, 3, 2 → 0; 4, 3, 2 → 1; 2, 3, 2 → 2; 0, 3, 2.
    Следовательно, [1, 0, 1, 2] представляет оставшиеся монеты на каждом шаге для n = 10, g = 3 и c = 2.
    На первом шаге в этой последовательности 1 получается из (10 mod 3 = 1).
    На втором шаге 6 получается из 10//3 × 2 = 6, а 3 и 2 остаются постоянными на протяжении всего процесса.
В табл. 2.9 показаны ожидаемые результаты для некоторых входных данных.
Таблица 2.9. Некоторые ожидаемые результаты для разных входных значений в задаче группировки монет 
n, g, c Ожидаемый результат
255, 128, 70 127, 70
301, 10, 1 1, 0, 3
49, 49, 2 0, 2
10, 2, 1 0, 1, 0, 1

Алгоритм
.Для разделения монет на группы алгоритм использует рекурсию, которая выполняется до тех пор, пока не перестанут формироваться дальнейшие группы. Ниже подробно описаны шаги алгоритма.
1. Входной параметр n сравнивается с нулем. Если он равен нулю, то возвращается пустой список, так как нет монет для разделения на группы.
2. Подсчитывается количество монет, которые не могут составить полную группу, путем вычисления остатка от деления n на g. Результат сохраняется в переменной remain.
3. Вычисляется общее количество монет, необходимое для формирования всех полных групп, путем умножения числа полных групп (n//g) на размер каждой группы (c). Это значение сохраняется в переменной coins_needed.
4. Затем функция вызывает себя рекурсивно с входными параметрами coin_needed, g и c, пока не останется монет для группировки.
5. По завершении возвращается массив, содержащий количество оставшихся монет на каждом этапе группировки. 


Пропустить Навигационные Ссылки.
Чтобы оставить комментарий нужна авторизация
Печать