Задачи
September 2
Задача. Горячая картошка
Задача. Стоят N школьников в одной шеренге (от 1 до N).
- Первый школьник держит в руках горячую картошку.
- Каждую секунду школьник, держащий картошку, передает ее следующему.
- Как только картошка доходит до конца, направление меняется, и школьники продолжают передавать картошку в обратном направлении.
Даны два положительных целых числа N и Time. Верните номер школьника, держащего картошку, по истечении Time секунд.
1. N = 4; Time = 5
Output: 2
Примечание: 1 -> 2 -> 3 -> 4 -> 3 -> 2
Разбор
- Картошка проходит полный круг, когда она перемещается от 1го школьника к последнему или наоборот. Каждый полный круг занимает N - 1 секунд, где N - общее количество школьников.
- Чтобы определить, сколько полных кругов совершает картошка за заданное время, мы делим время на N - 1.
- А остаток от такого деления, extraTime = Time % (N - 1), показывает дополнительное время, оставшееся после завершения этих полных раундов.
Рассмотрим направление движения картошки:
- Если FullRounds четное, картошка движется вперед по шеренге.
- Если FullRounds нечетное, картошка движется назад.
- Это изменение направления происходит после каждого полного раунда.
В случае движения вперед, школьник, держащий картошка после дополнительного времени, будет находиться в позиции extraTime + 1. При движении назад школьник, держащий картошку, будет находиться в позиции n - extraTime.
Реализация
static int HotPotato(int n, int time) { int full = time / (n - 1); int extra = time % (n - 1); int direction = full % 2 == 0 ? 1 : -1; return direction == 1 ? extra + 1 : n - extra; }
https://gist.github.com/unilecs/94f15271fe9cc51cd6ee3df1e1e1def5