游客 Signup | Login
中文 | En

3617 - 数字正方形

现给定一个数N,用1N^2这些数做一个N*N的数字正方形,正方形规律如下:

N=5时输出正方形:

1 2 3 4 5

16 17 18 19 6

15 24 25 20 7

14 23 22 21 8

13 12 11 10 9

Input

测试包含多组测试数据,每组测试数据包含一行,

每行输入一个整数N1<=N<=10;

Output

对于每组测试数据输出如上规则的数字正方形

Examples

Input

1
3

Output

1
1 2 3
8 9 4
7 6 5

Solution C


#include <stdio.h>
main()
{
 int N;
 int a[10][10];
 while (scanf("%d",&N)!=EOF){
        int i,j,k,n=1;
 for(k=0;k<(N+1)/2;k++)
{ for(i=k,j=k;j<N-1-k;j++)
 {a[i][j]=n;n++;}
 for(;i<N-1-k;i++)
 {a[i][j]=n;n++;}
 for(;j>k;j--)
 {a[i][j]=n;n++;}
 for(;i>k;i--)
 {a[i][j]=n;n++;}
}
 if(N%2!=0)
 a[i][j]=n;
 for(i=0;i<N;i++)
{
 for(j=0;j<N;j++)
    if (j!=(N-1))
 printf("%d ",a[i][j]);
 else printf("%d",a[i][j]);
 if (j!=(N-1))
    printf("\n");
}
}
}

Solution C++

#include <bits/stdc++.h>
using namespace std;
int a[15][15];
int n;

void change()
{
	int ff=0;
	int data=1;
	int i=1,j=1;
	
	while(data<=n*n){
		
		a[i][j]=data++;
		
		
		if (ff==0){
			j++;
			if (a[i][j]!=0){
				i++;
				j--;
				ff=1;
			}
			continue;
		}
		
		if (ff==1){
			
			i++;
			if (a[i][j]!=0) {
				j--;
				i--;
				ff=2;
			}
			continue;
		}
		
		if (ff==2){
			
			j--;
			if (a[i][j]!=0){
				i--;
				j++;
				ff=3;
			} 
			
			continue;
			
		}
		
		
		if (ff==3){
			i--;
			if (a[i][j]!=0){
				j++;
				i++;
				ff=0;
			}
		
			
			continue;
		}
		
	}
	
	
}

void init()
{
	memset(a,0,sizeof(a));
	for (int i=0;i<=n+1;i++){
		a[0][i]=a[i][0]=a[n+1][i]=a[i][n+1]=-1;
	}
}


void print()
{
	for (int i=1;i<=n;i++){
		for (int s=1;s<=n;s++){
			if (s>1) printf(" ");
			printf("%d",a[i][s]);
		}
		printf("\n");
	}
}

int main()
{
	
	while(~scanf("%d",&n)){
		
		init();
		
		change();
		
		print();
		
	}
	return 0;
}
Time Limit 0 seconds
Memory Limit 128 MB
Discuss Stats
上一题 下一题