Description
對於給定的一個數n,要你打印n*n的螺旋矩陣。
比如n=3時,輸出:
1 2 3
8 9 4
7 6 5
Input
多組測試數據,每個測試數據包含一個整數n(1<=n<=32)
Output
對於每組測試數據,輸出一個n*n的螺旋矩陣,定義在題目描述裡。
在一組測試數據中,每個數占的字符寬度是該組數據中最大的數位數加1,比如3*3的螺旋矩陣,最大值是9,那麼每個數就要占2個字符寬度。
兩組測試數據之間用一個空行隔開。
Sample Input
1
2
3
Sample Output
1
1 2
4 3
1 2 3
8 9 4
7 6 5
代碼如下:(懷念初學的時候啊~~~)
#include#include #include #include #define MAXN 105 #define RST(N)memset(N, 0, sizeof(N)) using namespace std; int Kesha[105][105], cas = 0, n; int main() { while(~scanf(%d, &n)) { if(cas++) printf( ); int x, y, ans = 0; RST(Kesha); ans = Kesha[x=0][y=0] = 1; while(ans < n * n) { while(y + 1 < n && !Kesha[x][y+1]) Kesha[x][++y] = ++ans; while(x + 1 < n && !Kesha[x+1][y]) Kesha[++x][y] = ++ans; while(y - 1 >= 0 && !Kesha[x][y-1]) Kesha[x][--y] = ++ans; while(x - 1 >= 0 && !Kesha[x-1][y]) Kesha[--x][y] = ++ans; } int t = n * n; for(int i=0; i =10 && t<=99) printf(%3d, Kesha[i][j]); else if(t>=100 && t<=999) printf(%4d, Kesha[i][j]); else if(t >= 1000 ) printf(%5d, Kesha[i][j]); } printf( ); } } return 0; }