链接:https://www.nowcoder.com/questionTerminal/f9533a71aada4f35867008be22be5b6e
来源:牛客网

题目

有一个数组 a[N] 顺序存放 0~N-1 ,要求每隔两个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉的数的原始下标位置。以 8 个数( N=7 )为例: {0,1,2,3,4,5,6,7}0->1->2(删除)->3->4->5(删除)->6->7->0(删除) ,如此循环直到最后一个数被删除。

输入描述:

每组数据为一行一个整数n(小于等于1000),为数组成员数,如果大于1000,则对a[999]进行计算。

输出描述:

一行输出最后一个被删掉的数的原始下标位置。

示例

输入

  1. 3

输出

  1. 6

解析

  1. # 约瑟环问题
  2. def main1(n):
  3. arr = list(range(n))
  4. arr.pop(2)
  5. while len(arr) >= 3:
  6. arr.append(arr.pop(0))
  7. arr.append(arr.pop(0))
  8. arr.pop(2)
  9. return arr[1]
  10. def main2(n, m=3):
  11. result = 0
  12. for i in range(1, n + 1):
  13. result = (result + m) % i
  14. return result
  15. if __name__ == '__main__':
  16. while True:
  17. try:
  18. num = int(input())
  19. r = main2(num)
  20. print(r)
  21. except Exception:
  22. break