Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 01.03.2012, 19:04
luffi luffi вне форума
Прохожий
 
Регистрация: 05.12.2011
Сообщения: 48
Репутация: 10
По умолчанию цикл по кругу

По кругу располагаются n человек. Ведущий считает по кругу, начиная с
первого и выводит m человека. Круг сужается, счет восстанавливается со следующего после выведенного; так продолжается пока не останется один человек.
Ответить с цитированием
  #2  
Старый 01.03.2012, 19:34
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Я за вас рад. Хорошая детсадовская игра. Какое отношение имеет она к данному форуму?
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 01.03.2012, 19:43
luffi luffi вне форума
Прохожий
 
Регистрация: 05.12.2011
Сообщения: 48
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
Я за вас рад. Хорошая детсадовская игра. Какое отношение имеет она к данному форуму?
извиняюсь, я просто забыл дописать. помогите это запрограмировать. что бы вывело елемент который остался

Последний раз редактировалось luffi, 01.03.2012 в 19:47.
Ответить с цитированием
  #4  
Старый 01.03.2012, 20:07
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

А как сам видишь эту задачу? Что должно происходить, где и как, в каком месте не получается реализовать?
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #5  
Старый 01.03.2012, 20:19
luffi luffi вне форума
Прохожий
 
Регистрация: 05.12.2011
Сообщения: 48
Репутация: 10
По умолчанию

Цитата:
Сообщение от Bargest
А как сам видишь эту задачу? Что должно происходить, где и как, в каком месте не получается реализовать?
ну я вижу ето как цикл. которого мы задаем размер n. потом m ну пока ево нужно вводить. ну и удалеем m, ну я так понимаю елемент цикла. но я не знаю как его норм удалить и как продолжить отщет с следуешего после удалённого
Ответить с цитированием
  #6  
Старый 01.03.2012, 20:32
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Это самое "очевидное" решение. Программируется "в лоб" - вычисляешь номер, удаляешь, вычисляешь, удаляешь,...
Но представь. Злобный пользователь ввел в программу число человек ~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.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:30.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025