#include<bits/stdc++.h>
#define rep(i,j,k) for(register int i=j;i<=k;i++)
using namespace std;
typedef long long ll;
const int maxn = 100;
int l[maxn],r[maxn],tl[maxn],tr[maxn];
int n;
int main(){
while(scanf("%d",&n)!=EOF){
memset(l,0,sizeof l);memset(r,0,sizeof r);
int cnt=2; rep(i,1,n/2) l[i]=i,r[i]=n-i+1;
rep(i,1,n/2) printf("%d %d%s",l[i],r[i],i==n/2?"\n":" ");
while(cnt<=n-1){
cnt++;
int tmp=l[2];
memcpy(tl,l,sizeof l);
memcpy(tr,r,sizeof r);
rep(i,2,n/2-1) l[i]=tl[i+1]; l[n/2]=tr[n/2];
rep(i,2,n/2) r[i]=tr[i-1]; r[1]=tl[2];
rep(i,1,n/2) printf("%d %d%s",l[i],r[i],i==n/2?"\n":" ");
}
}
return 0;
}
PS.附带一份想当然的错误代码
#include<bits/stdc++.h>
#define rep(i,j,k) for(register int i=j;i<=k;i++)
using namespace std;
typedef long long ll;
const int maxn = 100;
bool vis[maxn][maxn];
bool match[maxn];
int n;
int main(){
while(scanf("%d",&n)!=EOF){
memset(vis,0,sizeof vis);
rep(i,1,n) vis[i][i]=1;
rep(i,1,n-1){
memset(match,0,sizeof match);
rep(j,1,n){
int cnt=0;
if(match[j]) continue;
rep(k,1,n){
if(j==k||match[j]||match[k]||vis[j][k]||vis[k][j]) continue;
vis[j][k]=vis[k][j]=1;
match[j]=1;match[k]=1;cnt++;
if(cnt==n/2) printf("%d %d\n",j,k);
else printf("%d %d ",j,k);
}
}
}
}
return 0;
}