思路
- 题意:就是给你一个数字n,让你把所有1~n的n个数字按照某个顺序排成序列,使得相邻的两个数字差值在2 ~ 4之间(包括2和4)
- 我们可以尝试一下分类,把所有奇数分成一组,偶数分成一组,
- 如果n是偶数,我们把所有的偶数按照从小到大的顺序从序列开头开始排好,例如2,4,6,8……,最后一个数字是n,剩下n/2个奇数,我们可以把n-3放在n后面,然后把n-1放在n-3后面,之后就是按照顺序从大到小放置n-5,n-7……,例如2,4,6,8,5,7,3,1.
- 如果n是奇数,就先把奇数从小到大放在前面,后面放n-3,n-1,n-5……
- 特殊情况n=2或者=3的时候误解输出-1
代码
#include <cstring>
#include <algorithm>
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
const int maxn=1e9+7;
int main(){
int T;
cin >> T;
while(T--){
vector<int> v;
int n;
cin >> n;
if(n<=3){
cout << "-1\n";
continue;
}
if(n%2==0){
for(int i=2;i<=n;i+=2){
v.push_back(i);
}
v.push_back(n-3);
v.push_back(n-1);
for(int i=n-5;i>=1;i-=2)v.push_back(i);
}else{
for(int i=1;i<=n;i+=2)v.push_back(i);
v.push_back(n-3);
v.push_back(n-1);
for(int i=n-5;i>=1;i-=2)v.push_back(i);
}
for(int i=0;i<v.size();i++)cout << v[i] << " ";
cout << "\n";
}
}