解题思路:
假设现在是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语言程序设计教程(第三版)课后习题9.6 (C语言代码)浏览:586 |
母牛的故事 (C语言代码)浏览:667 |
永远的丰碑 (C语言代码)浏览:652 |
【出圈】 (C语言代码)浏览:794 |
【魔板】 (C++代码)(时间超限,希望会的帮我改正一下)浏览:737 |
C语言程序设计教程(第三版)课后习题9.3 (C语言代码)浏览:593 |
格式化数据输出 (C语言代码)浏览:811 |
字符删除 (C语言代码)浏览:714 |
平方数问题,oj一直是wrong answer浏览:738 |
简单的a+b (C语言代码)浏览:461 |