题目分析

由题意,我们要构造一个满足反复将相邻元素求差而组成的序列.

最后结果要是 ,所以考虑把 放在一起,这样在第一次做差以后就有 .

这时要构造一个在旁边的 , 可以在由 做差得到.

但这样其余的都是 才能满足要求,所以考虑将差为 的两数放在一起,作完一次差得到 , 然后再让相邻两个 做差,即可构造出 .

构造过程如下

这里用到了 做差,所以当 时不能用这种方法构造出.

试验 的情况,的确做不到,所以输出 -1

代码

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    scanf("%d", &n);
    if (n < 3)
    {
        printf("-1\n");
        return 0;
    }
    printf("1");
    for (int i = n; i >= 2; i--)
        printf(" %d", i);
    printf("\n");
    return 0;
}