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
上一篇: 使用paginate方法分页无法判断获取的数据是否为空
下一篇: 哪些运动动作适合懒人做