zoukankan      html  css  js  c++  java
  • 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("
    ");
        }

    }

  • 相关阅读:
    使用C++11实现线程池的两种方法
    二分查找算法的几种实现
    UNP多线程编程技巧简单总结
    使用带外数据设置 C/S 心跳机制
    无法修正错误,因为您要求某些软件包保持现状
    2012.12-操作系统-吕晓鑫-计算机操作系统综述
    2013.03-多核操作系统-梁荣晓-多核操作系统发展综述
    2011.09-多核操作系统-李彦冬-多核操作系统发展综述
    Simultaneous Multithreading: Maximizing On-Chip Parallelism(精读)
    Simultaneous Multithreading: Maximizing On-Chip Parallelism(泛读)
  • 原文地址:https://www.cnblogs.com/Kaniso-Vok/p/13756284.html
Copyright © 2011-2022 走看看