【问题标题】:Playing cards game打牌游戏
【发布时间】:2015-07-17 19:50:05
【问题描述】:

在这里,我将 N 数量从 1 到 N 的卡片放在圆桌中,这样卡片 1 位于卡片 2 和卡片 N 之间。所有卡片最初都是颠倒的。目的是将所有牌面朝上。

假设我们触摸一张卡片 i,触摸卡片 i 会使卡片 i-1,i,i+1 面朝上。类似地触摸卡片 N 将使卡片 N-1,N,1st 面朝上。 我想确定所有牌面朝上所需的最少接触次数。

这是我在 python 中一直在尝试的内容

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

q 可以大到 10^20。

上面的逻辑有什么问题,如果上面的逻辑完全错误,那么正确的方法应该是什么。

【问题讨论】:

  • 关于算法的问题,而不是关于编程机制的问题,有自己的网站。请参阅meta.stackexchange.com/questions/129598/…,了解有关为问题选择适当 StackExchange 站点的指南。
  • (“上面的逻辑有什么问题”也应该更清楚——一个很好的问题描述了具体行为或看到的错误)。
  • 逻辑错误,因为如果 q%3 为 1 或 2,您只需要一次额外翻转,如果 q%3 为 2,则不需要 2。例如,q = 5,该代码将打印一个3,但你显然可以在2回合内翻转所有卡片
  • @EmilianoSorbello 对!知道了。谢谢! :)
  • 这不是招聘挑战问题吗??

标签: python playing-cards


【解决方案1】:

应该是这样的:

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

因此,一种简洁的编码方式是:

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

【讨论】:

  • 谢谢!第一行的安全方式是什么?
  • 在 try/except 块内转换成 int,或者先用 your_string.isDigit() 检查。你需要某种 while 循环来无限地请求输入,直到用户写一个数字