大致思路是将 n 块形如 [i,n] 的联通块绑在一起,然后根据 i 形如 1,3,...n,n−1,...,2(奇数情况,偶数类似),每块内摆放也形如 1,3,...n,n−1,...,2。细节见代码。
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m=0;
scanf("%d",&n);
if(n%4==2||n%4==3){
++m;
}
for(int i=1;i<=n;i++){
if(!(i&1)){
continue;
}
++m;
for(int j=i;j<=n;j++){
if(m&1){
if(j&1){
printf("%d ",j);
}
}else{
if(!(j&1)){
printf("%d ",j);
}
}
}
for(int j=n;j>=i;j--){
if(!(m&1)){
if(j&1){
printf("%d ",j);
}
}else{
if(!(j&1)){
printf("%d ",j);
}
}
}
}
for(int i=n;i;i--){
if(i&1){
continue;
}
++m;
for(int j=i;j<=n;j++){
if(m&1){
if(j&1){
printf("%d ",j);
}
}else{
if(!(j&1)){
printf("%d ",j);
}
}
}
for(int j=n;j>=i;j--){
if(!(m&1)){
if(j&1){
printf("%d ",j);
}
}else{
if(!(j&1)){
printf("%d ",j);
}
}
}
}
printf("\n");
return 0;
}