题意:
多组数据t(1<=t<=100);
构造一个长度为n(2<=n<=1000)的数列,包含1~n所有数的序列。该序列中每两个相邻的数之间差的绝对值大小在2~4之间。
思路:
由于奇数列和偶数列之间两个数的差都刚好为2,满足题意。我们可以先以奇数列开始,先输出1~n中所有的奇数,从大到小开始。然后输出偶数,因为相邻数的差必须在[2,4]中,并且由于奇数列最后结尾的数肯定是1,所以我们需要把2和4顺序调换过来,就符合题意,接着从6往下输出就好了。所有如果n<4的话,很明显没有相对应的数列满足题意。于是输出-1.
#include<iostream>
using namespace std;
void solve(int x)
{
if (x < 4)
{
cout << "-1" << endl;
return;
}
int i;
for (i = x; i >= 1; i--)
{
if (i % 2 == 1)
{
cout << i << " ";
}
}
cout << "4 2 ";
for (i = 6; i <= x; i += 2)
{
cout << i << " ";
}
cout << endl;
return;
}
int main()
{
int t;
cin >> t;
while (t--)
{
int n;
cin >> n;
solve(n);
}
return 0;
}