Задача 'Неправильная считалка'
Ребята во дворе решили поиграть в прятки. Чтобы выбрать ведущего, который будет искать, они решили воспользоваться считалкой. Считалка состоит из k слов и используется следующим образом. Все n ребят становятся в круг, и один из них, начиная с себя, по очереди указывает на ребят в порядке, в котором они стоят по кругу, называя слова считалки. Тот, на кого указывает считающий, называя последнее слово считалки, выбывает из круга. После этого считалка повторяется сначала, а счет начинается со следующего за выбывшим. Так продолжается до тех пор, пока в круге не останется один человек. Он то и будет ведущим. Но на этот раз ребята так увлеклись идеей предстоящей игры, что забывали выходить из круга после того, как считающий указывал на них, называя последнее слово считалки. В результате считающий снова указывал на них при следующих повторениях считалки. Ребята заметили это только тогда, когда после очередного повторения считалки считающий снова указал на последнем слове на участника, который уже должен был покинуть круг. Теперь их заинтересовал вопрос – а на скольких ребят в этот момент считающий все еще не указал, что они должны покинуть круг.
Помогите пожалуйста, вот мой код:
a,b=map(int,input().split())
c=[0 for i in range(a)]
num=b%a+0-1
for j in range(1,a+2):
if 2 in c:
break
if num >= a:
num%=a
c[num]+=1
num+=j
print(c.count(0))
Но выдаёт неправильные ответы. Посмотрел в дебаггере, но и там не понял в чём ошибка.
Пример входныx данных:
6 14
Пример выходных данных
3
Пример входныx данных:
6 13
Пример выходных данных
0
Ответы (3 шт):
Что вы добавляете к num в конце цикла? Не b ли там требуется?
А вообще задача эта может решаться без перебора (кто знает, сколько там ребят - вдруг триллион?) с использованием НОК
n - НОК(n,k)/k = n - n / НОД(n,k)
Не очень понял приведенный код с учетом нейминга переменных, но могу предложить вариант считалочки на бесконечном цикле
import itertools
children_count, words_count = (6, 14)
ext = []
for ix, c in enumerate(itertools.cycle([_ for _ in range(children_count)])):
if not (ix + 1) % words_count:
if c in ext:
break
ext.append(c)
print('Число ребят - {}'.format(children_count - len(ext)))
Можно так
n, k = map(int, input().split())
step = k % n
gone = [0] * n
i = -1
count = n
while True:
i = (i + step) % n
if gone[i] == 1:
break
gone[i] = 1;
count -= 1
print(count)