海使


私信TA

用户名:yifeixintian

访问量:873

签 名:

等  级
排  名 789
经  验 3738
参赛次数 0
文章发表 12
年  龄 0
在职情况 学生
学  校 中山大学
专  业

  自我简介:

TA的其他文章

解题思路: 

假设现在是6个人,就是初始:[1, 2, 3, 4, 5, 6],预期:[1,6, 5, 4, 3, 2],第一个人不动,从初始状态的第二个人开始换位,“2”有两种选择,①向左换位,一直与左边的人换位直到到达预期状态的位置;②向右换位,一直与右边的人换位直到到达预期状态的位置。每次怎么选择取决于哪种方法所需时间数较小,比如:“2”号第①种方法需要1分钟(注:此时[2, 1, 3, 4, 5, 6] 与[1, 3, 4, 5, 6,2]是等同的,因为这6个人是围成一圈,这两种状态下每个人的相对位置是一样的),而第②种方法需要4分钟;所以初始状态变为[2, 1, 3, 4, 5, 6],再去同样考虑“3”号,直到某一状态与预期状态等同。
注意事项:
怎么比较并计算①②两种方法所需时间,其实可以按照每个人的初始号码(这是人为给的),比如:“2”号向左换位所需时间只需该号与“1”号相减,向右换位时间就是“6”号与“2”号相减;同样对于“3”号(即使这是“2”号已经换位,之前的方法依然有效),向左换位时间“3”减去“1”,向右换位“6”减去“3”...
参考代码:

t = int(input())
results = []
while t > 0:
   num = list(range(1, int(input())+1))
   sum_min = 0
   for n in range(1, len(num)):
       if n <= len(num) - 1 - n:
           sum_min += n
       else:
           sum_min += len(num) - 1 - n
   results.append(sum_min)
   t = t - 1

for result in results:
   print(result)

 

0.0分

0 人评分

  评论区

  • «
  • »