最近无聊的很,看了看一些基础的面试题,虽说简单点,但还是能学到一点东西的。
就比方main函数结束之后还能执行函数吗?答案是可以,使用atexit注册一个函数就可以了。
下面重点谈谈这个螺旋矩阵!
关于螺旋矩阵的说法不一,这里指的是形如
           21  22................
           20  7  8  9  10
           19  6  1  2  11
           18  5  4  3  12
           17  16 15 14 13
的矩阵。

问题有两个:
1. 编程实现输出这个矩阵
2. 设1点的坐标是(0,0),x方向向右为正,y方向向下为正.例如:7的坐标为(-1,-1) ,2的坐标为(0,1),3的坐标为(1,1).编程实现输入任意一点坐标(x,y),输出所对应的数字。

1. 第一个问题我是采用模拟进行构造的,可以看到从1开始的方向变化始终是 right->down->left->up,
所持续走的长度为1->1->2->2->3->3->...,发现了这个规律不难写出代码了!注意下面我把1的位置设置
在((n-1)/2, (n-1)/2)的位置。

面试题-螺旋矩阵(模拟)void Simulate(int n)
}


2. 第二个问题我也是先找出规律,然后进行模拟。
首先,不难看出n*n的螺旋矩阵的右下角的坐标一定是(m, m),这里m=n-1
通过观察,可以看出 n=1的时候,右下角(0,0)的值为1,当n=2的时候,右下角(1,1)的坐标值为(3,3),当n=3的时候,右下角(2,2)的坐标值为13.直觉告诉我,这个值是关于n的二次函数,设f(n) = a*n^2 + b*n + c
联立方程组,可以求得a,b,c。 最终算出来的f(n) = 4*n^2 - 2*n + 1
下面再根据(x,y)和右下角(n-1,n-1)之间的关系,计算出值即可。这里要注意当x的值与n-1相同时,应优先考虑y与-m是否有联系。这就要求在函数中要注意x,y的判断先后顺序了。
代码如下:

面试题-螺旋矩阵(模拟)//以(1,1)所在位置作为原点,向右作为x正半轴,向下作为y正半轴
面试题-螺旋矩阵(模拟)
int GetValue(int x, int y)


完整代码如下:
;
}

相关文章:

猜你喜欢
  • 2022-12-23
  • 2021-11-17
  • 2022-12-23
  • 2021-09-27
相关资源
相似解决方案