![]() |
|
|
#1
|
|||
|
|||
![]() По кругу располагаются n человек. Ведущий считает по кругу, начиная с
первого и выводит m человека. Круг сужается, счет восстанавливается со следующего после выведенного; так продолжается пока не останется один человек. |
#2
|
||||
|
||||
![]() Я за вас рад. Хорошая детсадовская игра. Какое отношение имеет она к данному форуму?
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#3
|
|||
|
|||
![]() Цитата:
Последний раз редактировалось luffi, 01.03.2012 в 19:47. |
#4
|
||||
|
||||
![]() А как сам видишь эту задачу? Что должно происходить, где и как, в каком месте не получается реализовать?
jmp $ ; Happy End! The Cake Is A Lie. |
#5
|
|||
|
|||
![]() Цитата:
|
#6
|
||||
|
||||
![]() Это самое "очевидное" решение. Программируется "в лоб" - вычисляешь номер, удаляешь, вычисляешь, удаляешь,...
Но представь. Злобный пользователь ввел в программу число человек ~100 000, а число счетов - порядка 10 000 000. Сколько минут/часов будет работать такая программа?... Но, если покопать математику, можно понять, что человек, на которого попадет счет, всегда будет иметь номер (m-1) mod n, т.е. остаток от деления кол-ва счетов (-1) на общее число человек, отсчитывая от предыдущего выбитого. Можно составить массив, где будут записаны подряд номера от 1 до n, и в цикле удалять человека с номером Num (вычисляется далее; сдвигать массив на одну позицию, затирая выбранный номер) и уменьшать n, после чего следующий номер будет как Num = (m-1+Num) mod n. То есть алгоритм: 1) Зануляем Num. 2) В цикле for от 1 до n-1 (количество повторов) делаем следующее: 2.1) Num := (m-1+Num) mod n; 2.2) Сдвигаем массив, начиная с элемента с индексом Num. 2.3) Уменьшаем n на 1. Массив должен быть пронумерован с нуля. Вроде ничего не упустил. ПыСы: не люблю за людей писать код, потому что переводить алгоритмы в код надо самим... Но так и быть, удаление: Код:
dec(n); for i:=Num to n-1 do // Массив нумеруется с нуля! Т.е. array[0..Max-1] a[i]:=a[i+1]; jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 01.03.2012 в 20:48. |