
解析:
要求每两个数之间的差为2或3或4,首先想到分奇偶
但是奇偶两端的差太大,所以可以将一个反转,即将两端小的拼在中间。
但是 1、2之间为1,所以可以反转一下2,4
n小于3,不符题意 输出-1
即 7 5 3 1 4 2 6这样子,交换4和2即可
- #include
- using namespace std;
- #define int long long
- const int N=1e5+5;
- int t,n,a[N];
- signed main(){
- scanf("%lld",&t);
- while(t--){
- scanf("%lld",&n);
- if(n<=3) puts("-1");
- else{
- if(n%2){
- for(int i=n;i>0;i-=2) printf("%d ",i);
- printf("%d %d ",4,2);
- for(int i=6;i<=n;i+=2) printf("%d ",i);
- }
- else{
- for(int i=n-1;i>0;i-=2) printf("%d ",i);
- printf("%d %d ",4,2);
- for(int i=6;i<=n;i+=2) printf("%d ",i);
- }
- puts("");
- }
- }
- return 0;
- }