打印蛇形矩阵

来源:互联网 发布:商品条形码制作软件 编辑:程序博客网 时间:2024/05/16 12:59

题目:

对于给定的n,打印出如下型式的蛇形矩阵。例如

n=3时输出:

  1 2 3  8 9 4  7 6 5
n=4时输出:

  1  2  3  4  12 13 14 5  11 16 15 6  10 9  8  7
用一个矩阵保存需要输出的数字,使用递归,每次计算最外层的数字。直到只剩下1列或者2列。
使用一维数组保存方阵。参数n表示n*n的方阵,参数m表示每次计算的是m*m的小方阵,a是小方阵的第一个元素地址,小方阵的第一个数字是s。
voidfun(int *a, int n,int m, int s){if(n<=0||m<=0)return;if(m==1)//只有一个数{a[0] = s;return;}if(m==2)//只有2行2列时{a[0] = s;a[1] = s+1;a[n*(m-1)+1] = s+2;a[n*(m-1)] = s+3;return ;}int v=s;///起始的数值for(int i=0; i<m; i++,v++)//→ 第一行,向右,最简单{a[i] = v ;//a[0][i]}for(int i=1, t=n; i<m; i++,v++,t+=n)//↓最外层向下的列,注意每增加行号加1时,地址+n{a[m-1+t] = v;//a[i][m-1]}for(int i=m-2,t=(m-1)*n;i>=0;i--,v++)//←最后一行,向左{a[t+i] = v;//a[m-1][i]}for(int i=m-2,t=(m-2)*n;i>0;i--,v++,t-=n)//↑最外层,向上的列,行号减1时地址-n。{a[t] = v; //a[i][0]}fun(a+n+1,n,m-2,v);//递归求解里面的小方阵。注意小方阵起始地址增加了n+1,列数减少了2.}


0 0
原创粉丝点击