3617 - 数字正方形
现给定一个数N,用1到N^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
测试包含多组测试数据,每组测试数据包含一行,
每行输入一个整数N,1<=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; }