蛇形矩陣,百度了一下,是這么一個東西:

像一條蛇一樣依次遞增。
我想,竟然做了螺旋矩陣,那做一下這個吧。在之前的螺旋矩陣的main函數基礎上,寫個函數接口就行了,這一次做的很快,但是這個矩陣感覺比螺旋要難。
我的思路是這樣的,先輸出左邊的矩陣(包括對角線),再輸出左邊的矩陣(不包括對角線)。
看上圖,因為我是一條對角線一條對角線這樣賦值的,所以左邊矩陣應該要賦值 n次,右邊是n-1次。
而外層循環的次數是偶數的時候,也就是這樣:
上圖的1,然后是:4->5->6,然后是:11->12->13->14->15這些是從上往下遞增,然后奇數的循環是從下往上地址。基於這個很快就可以寫出程序了,代碼是這樣的:
#include <iostream> using namespace std; void snakeLikeMat(int **a, int n) { int num = 1; int total = n*n; for (int i = 0; i < n; i++) { for (int j = 0; j <= i; j++) { if (i % 2 == 0) { a[j][i - j] = num++; } else { a[i - j][j] = num++; } } } for (int i = 0; i < n-1; i++) { for (int j = 0; j <= i; j++) { if (i%2==0) { a[n - 1 - j][n - 1 - i + j] = total--; } else { a[n - 1 - i + j][n - 1 - j] = total--; } } } } int _tmain(int argc, _TCHAR* argv[]) { int ha = 0; cin >> ha; int **a = new int*[ha]; for (int i = 0; i < ha; i++) { a[i] = new int[ha]; } snakeLikeMat(a, ha); for (int i = 0; i < ha; i++) { for (int j = 0; j < ha; j++) { cout << a[i][j] << "\t"; } cout << endl; } for (int i = 0; i < ha; i++) { delete [] a[i]; } delete[] a; return 0; }
兩個外層for循環分別是左矩陣和右矩陣。運行結果,取什么呢
1,3,8吧
1:

3:

8:

哈哈,見笑了。
