Хороший связанный список с большим N

Если у нас есть круговой связанный список такой, что:

и код:

Int SO(LIST *L)
{
  While (L->next != L){
       L->next=L->next->next;
        L=L->next;
                       }

   return L->Data;

}

я хочу рассчитать вывод кода выше с n=729, n=2200?

я думаю, что это именно из http://en.wikipedia.org/wiki/Josephus_problem проблемы. как я должен рассчитать выход и что такое выход.

кто-нибудь может мне помочь?

1 ответ

Если я правильно понял проблему, это обобщение известной загадки.

При каждом обходе связанного списка вы удаляете половину элементов. Итак, подумайте о ситуации, когда n является степенью 2.

В этом случае первый узел никогда не будет удален, и ответ будет 1.

Следовательно, при первом обходе после каждого удаления просто проверяйте количество оставшихся узлов. Если число оставшихся узлов является степенью двойки, то текущие L-данные должны быть ответом.

Другие вопросы по тегам