版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/moses1213/article/details/52411169
编程题:有蛇形矩阵,比如宽为3的时候为 1 2 3
8 9 4
7 6 5,
宽为4的时候为:1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
要求按行打印矩阵,譬如宽为3的时候打印1 2 3 8 9 4 7 6 5.。
关键是先对矩阵按顺时针方向赋值,除了运用递归似乎没什么好的思路,先给最外圈赋值,递归调用函数给内层圈赋值,每完成一圈圈的宽度减2.
#include <iostream>
using namespace std;
void MatrixInCircle(int** numbers, int width, int start)
{
static int num = 1;
if(width > 0)
{
if(width == 1)
numbers[start][start] = num;
else
{
int End = start + width - 1;
for(int i = start; i <= End; ++i)
numbers[start][i] = num++;
for(int i = start + 1; i <= End; ++i)
numbers[i][End] =num++;
for(int i = End - 1; i >= start; --i)
numbers[End][i] = num++;
for(int i = End - 1 ; i > start; --i)
numbers[i][start] = num++;
}
}
}
void MatrixClockwisely(int width)
{
int** numbers = new int*[width];
for(int i = 0; i < width; ++i)
numbers[i] = new int[width];
int start = 0;
int W = width;
while(W > 0)
{
MatrixInCircle(numbers, W, start);
W -= 2;
++start;
}
for(int i = 0; i < width; ++i)
{
for(int j = 0; j < width; ++j)
cout << numbers[i][j] << " ";
}
//释放内存
for(int i = 0; i < width; ++i)
delete[] numbers[i];
delete[] numbers;
}
int main() {
// your code goes here
MatrixClockwisely(4);
return 0;
}