题目分析
由题意,我们要构造一个满足反复将相邻元素求差而组成的序列.
最后结果要是 ,所以考虑把
和
放在一起,这样在第一次做差以后就有
.
这时要构造一个在旁边的 , 可以在由
与
做差得到.
但这样其余的都是 才能满足要求,所以考虑将差为
的两数放在一起,作完一次差得到
, 然后再让相邻两个
做差,即可构造出
.
构造过程如下
这里用到了 与
做差,所以当
时不能用这种方法构造出.
试验
的情况,的确做不到,所以输出
-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;
}