解题思路:
假设现在是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 人评分
C语言程序设计教程(第三版)课后习题11.11 (C语言代码)浏览:804 |
A+B for Input-Output Practice (IV) (C语言代码)浏览:551 |
C语言程序设计教程(第三版)课后习题10.5 (C语言代码)浏览:1484 |
【出圈】 (C语言代码)浏览:590 |
字符串对比 (C语言代码)浏览:1471 |
计算质因子 (C++代码)浏览:1825 |
C语言程序设计教程(第三版)课后习题6.4 (C语言代码)浏览:1072 |
WU-复数求和 (C++代码)浏览:2119 |
C语言程序设计教程(第三版)课后习题9.8 (C语言代码)浏览:672 |
矩形面积交 (C语言代码)浏览:1433 |