欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C/C++語言 - 日常算法 - 蛇形填數

程序员文章站 2022-08-03 08:12:41
C/C++語言 - 日常算法 - 蛇形填數 日期 : 2019-06-11 問題描述: 在n×n方阵里填入1,2,…,n×n,要求填成蛇形。 例如,n=4时方阵为: 10 11 12 1 9 16 13 2 8 15 14 3 7 6 5 4 上面的方阵中,多余的空格只是为了便于观察规律,不必严格输 ......

c/c++語言 - 日常算法 - 蛇形填數

日期 : 2019-06-11

問題描述:

在n×n方阵里填入1,2,…,n×n,要求填成蛇形。

例如,n=4时方阵为:

10   11  12  1

9  16  13  2

8  15  14  3

7  6   5   4

上面的方阵中,多余的空格只是为了便于观察规律,不必严格输出。n≤8。

代碼部分

 

 1 #include <iostream>
 2 #include <cstring>  // 提供 memset 函數,這是 c 的頭文件
 3 
 4 using namespace std;
 5 
 6 #define maxn 100
 7 #define test2
 8 #define result
 9 
10 int snakelike(void) {
11     // 蛇形填數
12 int a[maxn][maxn];
13 int row;
14     memset(a, 0, sizeof(a));
15     cout << "please input the row" << endl;
16     cin >> row;
17 #ifdef test  // 只是為了檢測代碼輸出情況
18     for (int i = 0; i < row; i++)
19     {
20         for (int j = 0; j < row; ++j)
21         {
22             a[i][j] = i;
23         }
24 }
25 #endif
26 #ifdef test2
27     int x = 0, y = row - 1,brush = 1;
28     a[x][y] = 1;
29     while(brush < row * row)
30     {
31         while (x + 1 < row && !a[x + 1][y]) { a[++x][y] = ++brush; }
32         while (y - 1 >= 0 && !a[x][y - 1]) { a[x][--y] = ++brush; }
33         while (x - 1 >= 0 && !a[x - 1][y]) { a[--x][y] = ++brush; }
34         while (y + 1 < row && !a[x][y + 1]) { a[x][++y] = ++brush; }
35     }
36 
37 #endif
38 
39 #ifdef result
40     cout << "---------result---------" << endl << endl;
41     int count = 0;
42     for (int i = 0; i < row; i++)
43     {
44         for (int j = 0; j < row; ++j)
45         {
46             cout << a[i][j] << "\t";
47             count++;
48             if (!(count % row))
49             {
50                 cout << "\b" << endl << endl;
51             }
52         }
53     }
54 #endif
55     return 0;
56     }
57         int main(int argc,char const *argv[])
58 {
59      snakelike();
60      return 0;
61 }
62