• C语言编程如何实现输出一个回型递增的N阶矩阵(螺旋矩阵)


    首先,说到输出矩阵无论什么水平的人都会认为使用数组最为方便,所以这里说明的是利用多维数组的实现。

    首先是算法需要的变量定义

    int i,j,n,sum;
    printf("请输入矩阵的行列长度:
    ");
    scanf("%d",&n);
    int juzhen[n][n];
    memset(juzhen,0,sizeof(juzhen));
    sum=1;

    其次就是核心算法,此程序核心在于如何写入元素到定义的数组中,要实现回型的数据递增,就必须使用不同的方法的输入不同方向递增的数据;

    还有这里要注意数组的定义,是从0号下标开始填入元素(当然从下标为一的元素开始也是可以的,此方法类似不予说明);

    另外在换方向输入的时候还要注意前一方向已经输入数据的数组元素不能再输入,于是使用if语句以区分是否填充过数据(这里需要提前将数组全部置零,使用了memset函数,此函数需要头文件string.h)。

    这里定义了for语句实现的四种方向的输入

    for(i=0;i<n/2;i++)
       {
         for(j=0;j<n-1;j++)//向右
            {
                if(juzhen[i][j]==0)
                juzhen[i][j]=sum++;
            }
            for(j=i;j<n-1;j++)//向下
            {
                if(juzhen[j][n-1-i]==0)
                    juzhen[j][n-1-i]=sum++;
            }
            for(j=n-i-1;j>i;j--)//向左
            {
                if(juzhen[n-1-i][j]==0)
                juzhen[n-1-i][j]=sum++;
            }
            for(j=n-1-i;j>i;j--)//向上
            {
                if(juzhen[j][i]==0)
                    juzhen[j][i]=sum++;
            }

    最后在对输入的数字做区分,当N阶矩阵是一个偶数阶的矩阵时没有矩阵中心元素,但是奇数阶矩阵有,语句如下

    if(n%2==1)
            juzhen[(n-1)/2][(n-1)/2]=sum++;

    最后对数组进行输出

    for(i=0;i<=n-1;i++)
        for(j=0;j<=n-1;j++)
            {
                printf("%4d",juzhen[i][j]);
                if(j==n-1)
                    printf("
    ");
            }
    完整源代码如下
    ```
    
    #include<string.h>

    #include<stdio.h>

    int main()
    {
    int i,j,n,sum;
    printf("请输入矩阵的行列长度: ");
    scanf("%d",&n);
    int juzhen[n][n];
    memset(juzhen,0,sizeof(juzhen));
    sum=1;

    for(i=0;i<n/2;i++)
    {
      for(j=0;j<n-1;j++)//向右
        {
            if(juzhen[i][j]==0)
            juzhen[i][j]=sum++;
        }
        for(j=i;j<n-1;j++)//向下
        {
            if(juzhen[j][n-1-i]==0)
                juzhen[j][n-1-i]=sum++;
        }
        for(j=n-i-1;j>i;j--)//向左
        {
            if(juzhen[n-1-i][j]==0)
            juzhen[n-1-i][j]=sum++;
        }
        for(j=n-1-i;j>i;j--)//向上
        {
            if(juzhen[j][i]==0)
                juzhen[j][i]=sum++;
        }
    
    }
            if(n%2==1)
            juzhen[(n-1)/2][(n-1)/2]=sum++;
    
    for(i=0;i<=n-1;i++)
    for(j=0;j<=n-1;j++)
        {
            printf("%4d",juzhen[i][j]);
            if(j==n-1)
                printf("
    ");
        }

    }

  • 相关阅读:
    Filebeat 日志收集器 安装和配置
    纠错式教学法对比鼓励式教学法 -----Lily、贝乐、英孚,乐加乐、剑桥国际、优学汇、北外青少
    硅谷夜谈
    指路Reactive Programming
    Spring WebFlux 要革了谁的命?
    flink部署操作-flink standalone集群安装部署
    Flink的高可用集群环境
    当怪物来敲门 经典台词
    浅析几种线程安全模型
    最详细的排序解析,理解七大排序
  • 原文地址:https://www.cnblogs.com/Kaniso-Vok/p/13756284.html
Copyright © 2020-2023  润新知