解题思路: 

假设现在是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分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论