N*N内递矩阵算法
如图就是一个n*n内递矩阵,如何去创建他呢?
首先,我们知道如图的5*5(N*N)内递矩阵由外而内是有3(m)层,第一个圈圈都为1,内二圈圈都为2,内三圈圈都为3.
我们可以仔细观察 并 用笔把他对应的坐标写出来,则有:
2.用i 和 j 和k来遍历元素行和元素列,并且有些行和列是固定不动的值这和N有关 即N-i-1 。
1.算出m 看他是有多少层组成,m和i息息相关
例子:创建7*7(N*N)的内递矩阵并输出。
/* 时间:2020年9月14日 09:57:08 例子:创建7*7的内递矩阵并输出。 */ #include <stdio.h> #define N 7 //7*7的内递矩阵 void fun(int (*a)[N]) { int i,j,k,m; // i j k部分遍历行列,m 层数。 if(N%2==0) m=N/2 ;//求m层数 else m=N/2+1;//求m层数 for(i=0; i<m; i++) { // i小于层数,i遍历左上部分的元素行和元素列 for(j=i; j<N-i; j++) //j<N-i j遍历右下部分的元素行和元素列 a[i][j]=a[N-i-1][j]=i+1; //把第一行和最后一行赋值 for(k=i+1; k<N-i; k++) //k=i+1,k<N-i,k遍历 除了第一行和最后一行 (中间)的元素行 , 元素列由i和N-i-1遍历 a[k][i]=a[k][N-i-1]=i+1; //对除了第一行和最后一行 (中间) 的列赋值 } } void main() { int x[N][N]={0},i,j; fun(x); //进入创建函数 printf("\nThe result is:\n"); for(i=0; i<N; i++) //创建完毕 打印出来 { for(j=0; j<N; j++) printf("%3d",x[i][j]);// printf("\n"); } }
认真看 ,主要考逻辑和规律,遇到这种题需要画出他的坐标找规律比较好算,