腾讯模拟笔试

本文介绍了一种使用C++实现的蛇形矩阵按顺时针方向填充并打印的方法。通过递归的方式处理每一层矩阵,实现了对于任意宽度的矩阵进行正确填充与打印的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编程题:有蛇形矩阵,比如宽为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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值