链接
G. Special Permutation
time limit per test2 seconds
memory limit per test256 megabytes
inputstandard input
outputstandard output
A permutation of length n is an array p=[p1,p2,…,pn], which contains every integer from 1 to n (inclusive) and, moreover, each number appears exactly once. For example, p=[3,1,4,2,5] is a permutation of length 5.
For a given number n (n≥2), find a permutation p in which absolute difference (that is, the absolute value of difference) of any two neighboring (adjacent) elements is between 2 and 4, inclusive. Formally, find such permutation p that 2≤|pi−pi+1|≤4 for each i (1≤i<n).
Print any such permutation for the given integer n or determine that it does not exist.
Input
The first line contains an integer t (1≤t≤100) — the number of test cases in the input. Then t test cases follow.
Each test case is described by a single line containing an integer n (2≤n≤1000).
Output
Print t lines. Print a permutation that meets the given requirements. If there are several such permutations, then print any of them. If no such permutation exists, print -1.
Example
inputCopy
6
10
2
4
6
7
13
outputCopy
9 6 10 8 4 7 3 1 5 2
-1
3 1 4 2
5 3 6 2 4 1
5 1 3 6 2 4 7
13 9 7 11 8 4 1 3 5 2 6 10 12
题意:题目给出一个数字,要求构造一个长度为n的数字序列。且该序列中的数字范围为1到n,且数字不重复出现,每个数字与相邻的数字绝对差值在2到4(包括2和4)之间,输出该序列。
思路:我们可以从最大的奇数开始输出,每次减2,到输出1时,输出4,2,然后从6开始每次加2,直至输出完成。
注意特判n小于4无解。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int T;
cin >> T;
while(T--)
{
int n;
cin >> n;
if (n < 4) {
cout << -1;
}else{
for (int i = n%2==0?n-1:n; i >= 1; i -= 2){
cout << i << " ";
}
cout << 4 << " " << 2 << " ";
for (int i = 6; i <= n; i += 2)
cout << i << " ";
}
cout << "\n";
}
return 0;
}