腾讯模拟笔试

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}


猜你喜欢

转载自blog.csdn.net/moses1213/article/details/52411169
今日推荐