蛇形矩阵,百度了一下,是这么一个东西:
像一条蛇一样依次递增。
我想,竟然做了螺旋矩阵,那做一下这个吧。在之前的螺旋矩阵的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] << " "; } cout << endl; } for (int i = 0; i < ha; i++) { delete [] a[i]; } delete[] a; return 0; }
两个外层for循环分别是左矩阵和右矩阵。运行结果,取什么呢
1,3,8吧
1:
3:
8:
哈哈,见笑了。