这种题一看就有很强的规律性,不如打个表,python打表很方便,代码如下

if __name__ == "__main__":
    n = 6
    res = []
    diff = inf
    for p in permutations(range(1, n + 1)):
        mx = -inf
        mn = inf
        for a,b in pairwise(p):
            mx = max(mx, a + b)
            mn = min(mn, a + b)
        if mx - mn < diff:
            res = p
            diff = mx - mn
    print(res)

可以看看结果如下

    (1, 3, 2)
    (1, 4, 2, 3)
    (1, 5, 2, 4, 3)
    (1, 6, 2, 5, 3, 4)

发现就是一个顺序和逆序。 那么答案就是:

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define close ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
signed main() {
    close;
    int n; cin >> n;
    vector<int> a(n);
    int num = 1;
    for(int i = 0; i < n; i+=2) a[i] = num++;
    num = n;
    for(int i = 1; i < n; i+=2) a[i] = num--;
    for(auto i: a) cout << i << " ";
    return 0;
}

那么如何分析正解呢,对于,显然为0。

对于的情况: 我们可以构造一个加1减1的序列,这样就能够保证绝对差肯定为1