N*N内递矩阵算法

                  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");
  }
}

认真看 ,主要考逻辑和规律,遇到这种题需要画出他的坐标找规律比较好算,

本文来自博客园,作者:咸瑜,转载请注明原文链接:https://www.cnblogs.com/bi-hu/p/13665183.html

原文地址:https://www.cnblogs.com/bi-hu/p/13665183.html