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

    }

  • 相关阅读:
    BPM系统终于告一段落
    淘宝SOA框架dubbo学习(5)--结果缓存
    淘宝SOA框架dubbo学习(3)--搭建监控中心
    淘宝SOA框架dubbo学习(4)--参数验证
    淘宝SOA框架dubbo学习(1)--first demo
    淘宝SOA框架dubbo学习(2)--搭建Zookeeper注册中心服务
    SOA Dubbo分布式架构学习
    编程有害身体健康 且Coding且珍惜
    数据库日志收缩大小
    dax 计算某一列重复出现次数
  • 原文地址:https://www.cnblogs.com/Kaniso-Vok/p/13756284.html
Copyright © 2020-2023  润新知