70,037
社区成员
发帖
与我相关
我的任务
分享#include<stdio.h>
#define N 20
#define WAP(a,b) {int _t=a;a=b;b=_t;}
void change(int a[N][N],int n,int k );
void output(int a[N][N],int n);
int main(void)
{
int n,i,j,x,y,k,m,count;
int a[N][N];
while((scanf("%d %d",&n,&m))==2)// n 值为当前矩阵的层, m 值的奇偶是矩阵蛇形的方向
{
for(i=count=0,k=1;i>=0;i+=k)
{
if(i==n)
{
k=-1;
}
if(k>0)
{
x=i,y=0;
j=0;
}
else
{
x=n-1,y=n-i+1;
j=2;
}
for(;j<=i;++j)
{
a[x--][y++]=++count;
}
}
change(a,n,m);
output(a,n);
}
return 0;
}
void change(int a[N][N],int n,int k)
{
int x,y;
if(k%2)
{
for(x=0;x<n;x+=2)
{
for(y=1;y<n;y+=2)
{
WAP(a[x][y],a[y][x]);
}
}
}
else
{
for(x=0;x<n;++x)
{
for(y=x;y<n;y+=2)
{
WAP(a[x][y],a[y][x]);
}
}
}
}
void output(int a[N][N],int n)
{
int x,y;
for(x=0;x<n;++x)
{
for(y=0;y<n;++y)
{
printf("%4d",a[x][y]);
}
puts("");
}
}