2015-07-17 2 views
0

Здесь у меня есть N количество карточек, пронумерованных от 1 до N, помещенных в круглый стол, так что карта 1 находится между картой 2 и картой N. Все карты первоначально перевернуты. Цель состоит в том, чтобы повернуть все карты лицевой стороной вверх.Игра в карточные игры

Скажем, мы касаемся карты i, касаясь карты, я поверну карточки i-1, i, i + 1 лицом вверх. аналогично касаясь карты N, карты N-1, N, 1-й карты будут обращены вверх. Я хочу определить минимальное количество касаний, необходимых для просмотра всех карт.

вот что я пытался в питона

q = int(raw_input()) 
if q==1 or q==2: 
    print "1" 
else: 
    r = q%3 
    l = q/3 
    print r+l 

д может быть как 10^20.

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

+1

Вопросы алгоритмов, а не на вопросы о механики программирования, имеют свой собственный сайт. См. Http://meta.stackexchange.com/questions/129598/which-computer-science-programming-stack-exchange-do-i-post-in рекомендации по выбору подходящего сайта StackExchange для ответа на вопрос. –

+0

(«Что не так с логикой выше» также должно быть более ясным - хороший вопрос описывает ** конкретное поведение или обнаруженную ошибку). –

+0

Логика неверна, потому что вы хотите только один дополнительный флип, если q% 3 - это 1 или 2, а не 2, если q% 3 равно 2. Например, с q = 5 этот код напечатает 3, но вы можете, очевидно, перевернуть все карты за 2 оборота – Dleep

ответ

0

Это должно быть что-то вдоль линий:

answer = q/3 (+ 1 if q is not a multiple of 3) 

Так простой способ аккуратного способа кодирования this'd быть:

q = int (raw_input()) # This isn't safe since it causes Type Errors easily but... whatever... 
print (q/3) + 1 * (q % 3 > 0) # Because 1 * True = 1, 1 * False = 0 
+0

Спасибо! Каков безопасный путь для первой линии? – g19

+0

Преобразование в int внутри блока try/except или проверка сначала с помощью your_string.isDigit(). Вам понадобится какой-то цикл while, чтобы запросить ввод бесконечно, пока пользователь не напишет номер – Dleep