C/C++面试(3)——矩阵编程题(模拟法)

本文探讨C/C++中的矩阵编程,重点介绍螺旋矩阵和回字矩阵的实现,包括单螺旋和双螺旋矩阵的创建,以及如何在限定时间内完成编程挑战。通过模拟法提供解决方案,适合机试和面试准备。
摘要由CSDN通过智能技术生成

谈谈机试吧,虽然一举通过某知名学府的机试获得预录取,但是之后找实习过程中的机试通过率只有10%,十分惭愧。所以特地开了编程版,之后继续有彩蛋(⊙o⊙)哦~

链接里面有很多种方法,在这里,我只提出一种方法,只要稍加改动,就可以解决螺旋矩阵和回字矩阵了,具有一定的通用性吧。

1.螺旋矩阵

Tips:考虑到这是机试,时间有限,并不排除思维比较活跃的童鞋能够马上找到坐标与数值的关系,但是“模拟法”是最快最直接的。

相关链接:http://blog.csdn.net/sunmenggmail/article/details/7779651


1.1单螺旋矩阵

1.1.1从中间往外顺时针旋转,如下所示:

 

Tips:一圈一圈地由内向外拓展

#include <iostream>  
using namespace std;  
  
int main()  
{  
    int r, c;  
    cin >> r >> c;  
  
    int **a = new int*[r];  
    for (int k = 0; k < r; k ++)  
        a[k] = new int[c];  
	int col = (c + 1)/2, row = (r + 1)/2;  //3,3
    int end = (c - 1) / 2; //2
	int num = 1;
    a[col-1][row-1] = num ++;
	int idx, i, j;
	for (idx = end; idx > 0; idx --){
		for (i = idx; i <= row; i ++)  //2,3
			a[i][col] = num ++;
		for (j = col -1; j >= idx - 1; j --)//2,1
			a[row][j] = num ++;
		for (i = row - 1; i >= idx - 1; i --)//2,1
			a[i][idx - 1] = num ++;
		for (j = idx; j <= col; j ++)//2,3
			a[idx - 1][j] = num ++;

		col ++;
		row ++;
	}
  
    for (i = 0; i < r; i ++){  
        for (j = 0; j < c; j ++)  
            cout << a[i][j] << ' ';  
  
        cout << endl;  
    }  
  
    for(i = 0; i < r; i++){  
        delete []a[i];  
        a[i] = NULL;  
    }  
    delete []a;  
    a = NULL;  
  
    return 0;  
}  

1.1.2从外向内螺旋矩阵:

按顺时针方向构建一个m * n的螺旋矩阵

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值