程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> HLG 1564 螺旋矩陣 (趣味C語言)

HLG 1564 螺旋矩陣 (趣味C語言)

編輯:C++入門知識

 

 

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;
}


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved