Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ игра в казнь

Автор: Ex1Le 27.05.2005 17:51

По кругу располагаются n человек. Ведущий считает по кругу, начиная с первого, и выводит ("казнит" m-го человека. Круг смыкается, счет возобновляется со следующего после "казненного"; так продолжается, пока "в живых" останется только один человек. Найти номер оставшегося "в живых" человека, а также для заданного n найти такое m>1, при котором "в живых" останется первый.



Код

var
 i,n,k,index:integer;
 num:array[1..5000] of integer;
begin
write('Vvedite kolichestvo chelovek v krugu');
readln(n);
write('Vvedite chislo, do kotorogo vedetsya chet');
readln(k);
for i:=1 to n do num[i]:=i;
writeln('Isxodnaya numeraciya:1,2,... ,',n);
write('Poryadok isklucheniya:');
index:=0;
while n>1 do
begin
i:=0;
repeat
inc(i,1);
inc(index,1);
if index=n then index:=0
until i=k;
if index <>i then
begin
write(num[index]:8);
for i:=index to n-1 do num[i]:=num[i+1];
dec(index,1)
end
else
write(num[n]:8);
dec(n,1)
end;
write('Ostalsya chelovek pod nomerom',num[n]);
readln
end.


де-то кроется ошибка...потому что первым вылетает последний человек...потом еще считает 0 за человека, и иногда вылетает 2 человека под одним номером

Автор: volvo 27.05.2005 18:02

А поиском воспользоваться совсем лень?
http://forum.pascal.net.ru/index.php?showtopic=3483&view=findpost&p=31209

Автор: Ex1Le 27.05.2005 18:08

:p2: :yessss: respect

Автор: Ex1Le 27.05.2005 18:29

хмм...почему то при числах n=10, m=2, k=8 он перепрыгивает казнь 5го и 9го
( т.е. 10м должны казнить первого а прога считает ка 5го...а до 6го человека считает правильно...)

Автор: volvo 27.05.2005 19:09

Ну, во-первых, по твоему условию K вообще всегда должно быть равно N, так как ты хочешь узнать, какого человека казнят ПОСЛЕДНИМ...

А во-вторых, если ты попробуешь нарисовать картинку на листе бумаги, то очень быстро убедишься, что при наличии 10-ти осужденных последним будет казнен НЕ №1, а №5, о чем и говорит программа...

Автор: Ex1Le 27.05.2005 23:09

sad.gif казнять 2-4-6-8-10-3-5-7-9-1(!!) sad.gif

Автор: volvo 28.05.2005 0:10

:no: Внимательно !!!
2-4-6-8-10-3 ... Все правильно ... А дальше? 4-го уже казнили, поэтому будь добр 5-го пропустить, и казнить 7-го !!!
Вот окончательный порядок:
2-4-6-8-10-3-7-1-9-5 (!!!)

Автор: Ex1Le 28.05.2005 2:54

:D нас 5 человек и все как я посчитали :D

Автор: volvo 28.05.2005 3:01

Значит, учитесь считать, прежде чем решать такие задачи ... Как же ты проверять результаты будешь? А та последовательность, которую я привел, ничего тебе не говорит?

Автор: Ex1Le 28.05.2005 3:31

ты прав как всегда....:flowers: