2016-02-02 4 views
0

Проблема Иосифа Флавия (или перестановка Иосифа) - теоретическая проблема, связанная с определенной игрой подсчета голосов.Порядок устранения проблемы Джозефуса

Люди стоят в кругу, ожидая исполнения. Подсчет начинается в первой точке круга и продолжается по кругу по часовой стрелке. После указанного количества людей пропущено, выполняется следующий человек. Процедура повторяется с остальными людьми, начиная со следующего человека, идя в том же направлении и пропуская такое же количество людей, пока остается только один человек остается и освобождается. Например, если N = 10, то порядок устранения 2, 4, 6, 8, 10, 3, 7, 1, 9 и 5

The problem is, without simulation of the above game, try to find out the order of 
elimination through means of mathematical formula or a mathematical pattern. 

Изначально задана п т.е. количество людей в круге в начале. Дайте порядок устранения с учетом вышеуказанных условий и ограничений.

Простыми словами напечатайте образец смертей без использования каких-либо структур данных, таких как массивы и связанные списки.

+1

Почему вы не спрашиваете об этом на http://math.stackexchange.com? – elyashiv

+1

Я голосую, чтобы закрыть этот вопрос как не по теме, потому что он принадлежит на math.stackexchange.com – uselpa

+0

Потому что мне нужно закодировать проблему на C без использования каких-либо структур данных или массивов. Поскольку обмен стеками является платформой для программирования связанных вопросов, я чувствовал, что он принадлежит и здесь. Кстати, я уже разместил вопрос на math.stackexchange.com. @uselpa – user3600483

ответ

1

Я подготовил решение после изучения http://www.cs.man.ac.uk/~shamsbaa/Josephus.pdf. Этот рекурсивный упоминается в приведенном выше pdf.

int last_man(int n,int x) 
{ 
    if(n==1 && x==1) 
     return 1; 
    else if(n>1 && x==1) 
     return 2; 
    else if(last_man(n-1,x-1)==n-1) 
     return 1; 
    else 
     return last_man(n-1,x-1)+2; 
} 

X означает, что X-й человек умирает, а n - общее количество людей изначально. Цитирование этой функции по всем значениям x от 1 до n дает нам порядок элегирования.

+1

может кто-нибудь угадать временную сложность решения – user3600483

+2

Вы просили о порядке устранения. Это дает только последний человек. – Teepeemm

+1

, заменяя x от 1 до n, дает вам порядок устранения, для x == n он дает вам последний человек, стоящий – user3600483

Смежные вопросы