Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> на первый взгляд простая задачка... 
:(
    Опции темы
aMiGo!
  Дата 30.10.2003, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 6.4.2003
Где: Тула

Репутация: нет
Всего: нет



Здравствуйте!
Помогите справиться с задачей, что-то ничего в голову не приходит.

Цитата
Соревнования по прыжкам в высоту проводились по следующим правилам. Если спортсмен сбивал планку, он выбывал из дальнейшей борьбы, в противном случае - становился в конец очереди. Известно, что: спортсменов было N; между двумя последовательными неудачами каждый раз было ровно M удачных прыжков; последним сбил планку спортсмен с номером T. Напечатайте номера прыгунов в том порядке, в котором они сбивали планку.


Это сообщение отредактировал(а) aMiGo! - 30.10.2003, 23:10
--------------------
With the best regards, Anton
PM MAIL   Вверх
mr.DUDA
Дата 31.10.2003, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



Если пройти в обратном порядке по истории сбивания планки, то получим (номера распечатываются тоже в обратном порядке, но запомнить их и напечатать в прямом не составит труда, правда ?):
Код

const int  M, N, T; // д.б. заданы какие-то исходные данные

bool  bAlive[N];  // это наша очередь
for(int i=0; i<N; i++)  
    bAlive[i] = (i==T-1)?true:false; // в очереди остался только один чел.

for(int  n=1, m=0, iSportsman=T; !(n==N && m==M-1);)
{
   // печатаем номер прыгнувшего спортсмена (номера с 1 а не с 0)
   printf("%d", iSportsman+1);

   // увеличиваем на 1 счетчик удачных прыжков "m"
   // если "m" равно M, то добавляем спортсмена из списка выбывших
   // в очередь перед текущим спортсменом
   if(++m == M)
   {
        n++;  // увеличиваем количество челов в очереди
        if(!iSportsman) bAlive[N-1] = true;
            else bAlibe[iSportsman-1] = true;
   }

   // ищем предыдущего спортсмена в списке стоящих в очереди
   do
   {
       if(--iSportsman < 0)  iSportsman = N-1;
   }
   while(!bAlive[--iSportsman]);
}

Условие прекращения цикла - когда все спортсмены стоят в очереди, и еще не прошло M удачных прыжков (т.е. когда сейчас предстоит первый удачный прыжок).

!!! WARNING !!!
Это только идея. Не проверял и не отлаживал !


--------------------
user posted image
PM MAIL WWW   Вверх
aMiGo!
Дата 31.10.2003, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 6.4.2003
Где: Тула

Репутация: нет
Всего: нет



Сппсибо, мне и нужна была только идея.. щас посмотримс..
--------------------
With the best regards, Anton
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0594 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.