• 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

  • 相关阅读:
    Linux线程(一)
    模板(一)
    C++基础(八)
    C++基础(七)
    C++基础(六)
    C++基础(五)
    2.C#基础(二)
    1.C#基础(一)
    2.给出距离1900年1月1日的天数,求日期
    网络协议破解 SMTP
  • 原文地址:https://www.cnblogs.com/bi-hu/p/13665183.html
Copyright © 2020-2023  润新知