nyoj 33 蛇形填數
阿新 • • 發佈:2019-01-29
#include<stdio.h>
#include<string.h>
#define N 110
int dis[4][2]={1,0,0,-1,-1,0,0,1};
int main() {
int n,i,j,k,h,flag;
int map[N][N];
while(scanf("%d",&n)!=EOF) {
i=1;j=n;k=1;h=1;
memset(map,-1,sizeof(map));
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
map[i][j]=0;
map[1][n]=1;
k++;
i=1;j=n;
while(k<=n*n) {
i=i+dis[h-1][0];
j=j+dis[h-1][1];
if(map[i][j]!=0) {
i-=dis[h-1][0];
j-=dis[h-1][1];
h++;
if(h==5)
h=1;
else
h%=5;
i+=dis[h-1][0];
j+=dis[h-1][1];
}
map[i][j]=k++;
}
for(i=1;i<=n;i++) {
flag=0;
for(j=1;j<=n;j++) {
if(flag==0) {
flag=1;
printf("%d",map[i][j]);
}
else
printf(" %d",map[i][j]);
}
printf("\n");
}
}
return 0;
}
#include<string.h>
#define N 110
int dis[4][2]={1,0,0,-1,-1,0,0,1};
int main() {
int n,i,j,k,h,flag;
int map[N][N];
while(scanf("%d",&n)!=EOF) {
i=1;j=n;k=1;h=1;
memset(map,-1,sizeof(map));
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
map[i][j]=0;
map[1][n]=1;
k++;
i=1;j=n;
while(k<=n*n) {
i=i+dis[h-1][0];
j=j+dis[h-1][1];
if(map[i][j]!=0) {
i-=dis[h-1][0];
j-=dis[h-1][1];
h++;
if(h==5)
h=1;
else
h%=5;
i+=dis[h-1][0];
j+=dis[h-1][1];
}
map[i][j]=k++;
}
for(i=1;i<=n;i++) {
flag=0;
for(j=1;j<=n;j++) {
if(flag==0) {
flag=1;
printf("%d",map[i][j]);
}
else
printf(" %d",map[i][j]);
}
printf("\n");
}
}
return 0;
}