c语言经典的螺旋矩阵的几种

11.13
“今天也要好好学习,虽然水了一天,今天的高代数分也没怎么搞懂“

螺旋矩阵出现在我们学校2-3周前布置的编程题里,当时把自己转晕了。
现在来回顾一下,介绍一下主流的实现算法

大一都过了1/4了,好好学吧。

题目很简短,就是让你输出一个型如
c语言经典的螺旋矩阵的几种_第1张图片
的螺旋数组。

solution1:

设置一个大的for循环,里面有四个小for循环,对应四个边,因此进行一个大循环,便走完了一圈。

先空着;

solution2:

同样是循环,但是这个循环每一次循环是走一步,循环体是四个if判断.
原理是在矩阵的四个部位有相同的走法,如图
c语言经典的螺旋矩阵的几种_第2张图片
只需要写出对应的判断条件即可
虽然这个是从里向外旋的,但是大致相同。

对这个螺旋:
c语言经典的螺旋矩阵的几种_第3张图片
代码如下:
n是矩阵的阶
下面将用(x,y)来记录位置 选取正常的像素坐标系,原点在左上。

int x=0,y=0;
for (int i = 1;i<= n*n;i++){
	if (x>= y && n-1-x >= y){
		ary[x][y] = i;
		x++;
	}
	类似这样

}

solution3:
递归,感觉最好理解:

递归就是模拟一个一样的过程
显然在这里一样的过程可以认为是走过一圈
之后一次降阶

函数参数为:void rotate_once (int ary[][],int x,int y,int start_num,int n);// x,y是初始坐标,start_num是初始的要打印的数字,n是阶数(递归一次变n-2);

{
	if (n==0) return ;
	if (n==1) ary[n/2][n/2] = start_num;   //奇偶的两种出口条件;
	int j = y,i= x;
	for (i= x;i

算了,我想我不会
不想再想了…

你可能感兴趣的:(c语言)