首先将的每一对相邻两项求和,得到一个数组。那么数组的最大值减最小值即为数组的权值。
例如,若,那么,数组的极差是1。因此数组的权值为1。
现在小美希望你能构造一个长度为的排列,满足权值尽可能小。你能帮帮她吗?排列是指一个长度为的数组,其中 1 到每个元素恰好出现一次。
一个正整数,代表排列的长度。
一个合法的排列。如果有多解输出任意即可。
3
2 1 3
这个数组的权值为 1。输出[2,3,1]等排列也是合法的。
import sys n = int(input()) m = n // 2 ans = [] for i in range(m): ans.append(i+1) ans.append(n - i) if n % 2: ans.append(m + 1) for i in ans: print(i, end=' ') else: for i in ans: print(i, end=' ')
def sol(n): arr = [i+1 for i in range(n)] arr.sort(reverse=True) ans = [] left,right = 0,n-1 while left<=right: if left == right: ans.append(arr[left]) break ans.append(arr[left]) ans.append(arr[right]) left += 1 right -=1 str_ans = ' '.join([str(x) for x in ans[::-1]]).strip() return str_ans while 1: try: n = int(input()) ans = sol(n) print(ans) except: break
import sys for line in sys.stdin: a = line.split() n = int(a[0]) res = [0 for i in range(n)] max_n = n min_n = 1 for i in range(1,n,2): res[i] = max_n max_n = max_n - 1 for i in range(0,n,2): res[i] = min_n min_n +=1 out = " ".join(str(r) for r in res) print(out)