Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Считалочка

14K
07 декабря 2005 года
zl_ю_ка
6 / / 07.12.2005
Попалась задачка: ввести считалку и количество участников, причем присвоить каждому имя. В общем, на последнем слове участник выбывает, а счет продолжается до тех пор, пока не останется один победитель. Вывести его имя. (Желательно после каждого выбывания выводить имена оставшихся)
Голову сломала, ничего не получается. ну кол-во слов узнать легко, потом я решила заменить имя выбывающего на нолик, но появились проблемы со счетом...
может можно как-то исключить из массива выбывшего участника?? я такого способа не знаю и решила переприсваивать и уменьшать кол-во участников.. типа, если B(3) выбывает, то В(3)=В(4), В(4)=В(5), В(5)=В(6) и т.д.
короче, запуталась и не могу ее решить.
:( помогите решить, плиз.
2.2K
07 декабря 2005 года
123tk
57 / / 28.06.2003
Одно из возможных решений.

N - число участников типа bool B[N+1];
M - число слов.
Код:
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;
  }
}
14K
07 декабря 2005 года
zl_ю_ка
6 / / 07.12.2005
Спасиб... выходит я совсем тупая. Как это теперь в Паскаль засунуть??? :(
если не затруднит, help me
а то у меня глаза в кучу и ничего не понимаю...
ещё раз спасибо за решение!
2.2K
07 декабря 2005 года
123tk
57 / / 28.06.2003
Цитата:
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;
14K
07 декабря 2005 года
zl_ю_ка
6 / / 07.12.2005
Спасибо, солнышко!!!!
Очень благодарна...ты так быстро их решаешь!!!
Молодец!!! ;)
2.2K
07 декабря 2005 года
123tk
57 / / 28.06.2003
Цитата:
Originally posted by zl_ю_ка
Спасибо, солнышко!!!!
Очень благодарна...ты так быстро их решаешь!!!
Молодец!!! ;)

:} :} :}

Мимоходом, Ты свой подпись хоть раз прочитала?

Многие вещи нам непонятны не потому, что наши понятия [color=red]понятия[/color] слабы; но потому, что сии вещи не входят в круг наших понятий.

14K
07 декабря 2005 года
zl_ю_ка
6 / / 07.12.2005
какой ты внимательный...
а я уж точно выходит тупая :( :( :(
всё, не мила мне жизнь... бах! умерла...X)-
2.2K
07 декабря 2005 года
123tk
57 / / 28.06.2003
Цитата:
Originally posted by zl_ю_ка
какой ты внимательный...
а я уж точно выходит тупая :( :( :(
всё, не мила мне жизнь... бах! умерла...X)-

Если уж так вышло, что умерла, то почему отредактировала свой подпись. Не все равно???

14K
07 декабря 2005 года
zl_ю_ка
6 / / 07.12.2005
конечно, не все равно...
ой... меня в морге заискались, наверно... ;)
2.2K
07 декабря 2005 года
123tk
57 / / 28.06.2003
Прочитал условие задачи. Первый раз читал только выборочно. Значит усов.версия.
Код:
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;
14K
12 декабря 2005 года
zl_ю_ка
6 / / 07.12.2005
:) очень признательна, солнышко!!!!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог