for(int i=1;i<=N;i++)
B=true; //i-й участник активный
for(int cnt = N; cnt>1; cnt--)
{
int ndx = M%cnt;
if(ndx==0)ndx = cnt;
for(int j=1; j<=N; j++)
{
if(B[j])
{
ndx--;
if(ndx==0)
{
B[j] = false;
break;
}
}
}
}
// Опред. остав участника
int lastUser=0;
for(int j=1; j<=N; j++)
{
if(B[j])
{
lastUser = j;
break;
}
}
Считалочка
Голову сломала, ничего не получается. ну кол-во слов узнать легко, потом я решила заменить имя выбывающего на нолик, но появились проблемы со счетом...
может можно как-то исключить из массива выбывшего участника?? я такого способа не знаю и решила переприсваивать и уменьшать кол-во участников.. типа, если B(3) выбывает, то В(3)=В(4), В(4)=В(5), В(5)=В(6) и т.д.
короче, запуталась и не могу ее решить.
:( помогите решить, плиз.
Одно из возможных решений.
если не затруднит, help me
а то у меня глаза в кучу и ничего не понимаю...
ещё раз спасибо за решение!
Цитата:
Originally posted by zl_ю_ка
Спасиб... выходит я совсем тупая.
Спасиб... выходит я совсем тупая.
Нет. В данном случае, это я черезчур умный ;)
Код:
const
N = 10;
M = 6;
var
j, cnt, ndx, lastUser: Integer;
B : array[1..N] of bool;
begin
for j := 1 to N do
B[j] := True; //j-й участник активный
for cnt := N downto 2 do begin
ndx := M mod cnt;
if ndx = 0 then ndx := cnt;
for j := 1 to N do begin
if B[j] = True then begin
Dec(ndx);
if ndx = 0 then begin
B[j] := False;
Break;
end;
end;
end;
end;
// Опред. остав участника
lastUser := 0;
for j := 1 to N do begin
if B[j] = True then begin
lastUser := j;
Break;
end;
end;
end;
N = 10;
M = 6;
var
j, cnt, ndx, lastUser: Integer;
B : array[1..N] of bool;
begin
for j := 1 to N do
B[j] := True; //j-й участник активный
for cnt := N downto 2 do begin
ndx := M mod cnt;
if ndx = 0 then ndx := cnt;
for j := 1 to N do begin
if B[j] = True then begin
Dec(ndx);
if ndx = 0 then begin
B[j] := False;
Break;
end;
end;
end;
end;
// Опред. остав участника
lastUser := 0;
for j := 1 to N do begin
if B[j] = True then begin
lastUser := j;
Break;
end;
end;
end;
Очень благодарна...ты так быстро их решаешь!!!
Молодец!!! ;)
Цитата:
Originally posted by zl_ю_ка
Спасибо, солнышко!!!!
Очень благодарна...ты так быстро их решаешь!!!
Молодец!!! ;)
Спасибо, солнышко!!!!
Очень благодарна...ты так быстро их решаешь!!!
Молодец!!! ;)
:} :} :}
Мимоходом, Ты свой подпись хоть раз прочитала?
Многие вещи нам непонятны не потому, что наши понятия [color=red]понятия[/color] слабы; но потому, что сии вещи не входят в круг наших понятий.
а я уж точно выходит тупая :( :( :(
всё, не мила мне жизнь... бах! умерла...X)-
Цитата:
Originally posted by zl_ю_ка
какой ты внимательный...
а я уж точно выходит тупая :( :( :(
всё, не мила мне жизнь... бах! умерла...X)-
какой ты внимательный...
а я уж точно выходит тупая :( :( :(
всё, не мила мне жизнь... бах! умерла...X)-
Если уж так вышло, что умерла, то почему отредактировала свой подпись. Не все равно???
ой... меня в морге заискались, наверно... ;)
Код:
N = 10;
M = 6;
var
j, cnt, ndx, lastUser: Integer;
B : array[1..N] of bool;
Names : array[1..N] of String;
begin
// Получаем как-то, скорей всего с клавиатуры
// имена участников
// Здесь идет код набранный ручкой а не
// скопированный с форума
// ...
// ...
// Можно даже ввести и N и M, главное
// чтоб размерность массивов был больше N
for j := 1 to N do
B[j] := True; //j-й участник активный
for cnt := N downto 2 do begin
ndx := M mod cnt;
if ndx = 0 then ndx := cnt;
for j := 1 to N do begin
if B[j] = True then begin
Dec(ndx);
if ndx = 0 then begin
B[j] := False;
Break;
end;
end;
end;
for j := 1 to N do begin
writeln("После ", N-i+1, " круга устались");
if B[j] = True then begin
// Выводим оставшего участника
// скорей всего это тоже wriltln
writeln(names[j]);
end;
end;
// Опред. остав участника
for j := 1 to N do begin
if B[j] = True then begin
// Вывод
writeln("Остался: ", names[j]);
Break;
end;
end;
end;
M = 6;
var
j, cnt, ndx, lastUser: Integer;
B : array[1..N] of bool;
Names : array[1..N] of String;
begin
// Получаем как-то, скорей всего с клавиатуры
// имена участников
// Здесь идет код набранный ручкой а не
// скопированный с форума
// ...
// ...
// Можно даже ввести и N и M, главное
// чтоб размерность массивов был больше N
for j := 1 to N do
B[j] := True; //j-й участник активный
for cnt := N downto 2 do begin
ndx := M mod cnt;
if ndx = 0 then ndx := cnt;
for j := 1 to N do begin
if B[j] = True then begin
Dec(ndx);
if ndx = 0 then begin
B[j] := False;
Break;
end;
end;
end;
for j := 1 to N do begin
writeln("После ", N-i+1, " круга устались");
if B[j] = True then begin
// Выводим оставшего участника
// скорей всего это тоже wriltln
writeln(names[j]);
end;
end;
// Опред. остав участника
for j := 1 to N do begin
if B[j] = True then begin
// Вывод
writeln("Остался: ", names[j]);
Break;
end;
end;
end;
:) очень признательна, солнышко!!!!