G. Special Permutation(找规律模拟)

\(这题感觉自己就是瞎凑......\)

\(首先n<=3时无解\)

\(然后考虑奇数n\)

1 3 5 7 ...  n | n-3 n-1 | n-5 n-7 n-9 ... 2

\(其实就是前半段从1(奇数)一直加2加到n,就可以消去所有奇数\)

\(后半段从n-5(偶数)一直减2,就可以消去大部分偶数\)

\(至于中间的部分就是凑出来的\)

\(那么偶数其实也是一样的道理\)

\(前半段从1(奇数)一直加2加到n-1,后半段从n-6(偶数)一直减2\)

1 3 5 7 ... n-1 | n-4 n n-2 | n-6 n-8 ... 2
#include <bits/stdc++.h>
using namespace std;
int n,t,vis[1009];
int main()
{
	cin>>t;
	while(t--)
	{
		memset(vis,0,sizeof(vis));
		cin>>n;
		if(n<=3)	cout<<-1;
		else if(n==4)
			cout<<"2 4 1 3";
		else if(n%2==1)//奇数 
		{
			int now=1,shu=0;
			while(now<=n)	cout<<now<<" ",now+=2,shu++;
			now-=2;
			now-=3,cout<<now<<" ",shu++;//左三
			now+=2,cout<<now<<" ",shu++;//右二 
			if(shu<n) now-=4,cout<<now<<" ",shu++;//左四
			while(shu<n)	cout<<now-2<<" ",now-=2,shu++; 
		}
		else
		{
			int now=1,shu=0;
			while(now<=n)	cout<<now<<" ",now+=2,shu++;
			now-=2;
			if(shu<n) now-=3,cout<<now<<" ",shu++;//左三 
			if(shu<n) now+=4,cout<<now<<" ",shu++;//右四 
			if(shu<n) now-=2,cout<<now<<" ",shu++;//左二
			if(shu<n) now-=4,cout<<now<<" ",shu++;//左4 
			while(shu<n)	cout<<now-2<<" ",now-=2,shu++; 
		}
		cout<<endl;
	}
}
posted @ 2020-05-11 08:03  倾叶子佮  阅读(180)  评论(0)    收藏  举报