m0_59603572 2021-07-02 08:39 采纳率: 66.7%
浏览 165
已采纳

c语言算法 蛇形矩阵

蛇形填数,给出N*N的矩阵,要求用程序填入下列蛇形排列形式得数(例如N=5)则形成
1 3 4 10 11
2 5 9 12 19
6 8 13 18 20
7 14 17 21 24
15 16 22 23 25

  • 写回答

1条回答 默认 最新

  • 关注
    /*  编写者:Zero       编写时间:2018年  */
    #include<stdio.h>
    #define N 100
    void ZigzagMatrix(int a[][N], int n);
    int main()
    {
        int a[N][N] = {0};
        int n;
        a[0][0] = 1;
        printf("Input n:\n");
        if(!scanf("%d",&n) || n<=0 || n >100)   /* 清除非法输入 */
        {
            printf("Input error!");
        }
        else
        {
            ZigzagMatrix(a, n);    /* 调用输出蛇形矩阵的函数 */
        }
        return 0;
    }
    
    void ZigzagMatrix(int a[][N], int n)  /* 函数功能:输出蛇形矩阵 */
    {
        int i, j, k, m;
        for(m = 1; m <= 2*n - 3; m++)  //上三角有 n-1 条斜线(把最长的对角线算到上三角上),下三角有 n-2 条,共2n-3条
        {
            if(m<=n-1)   /* 循环打印上三角 */
            {
                k = m;
                for(i = 0; i <= k; i++)
                {
                    if(k%2)    /* k为偶数的情况 */
                    {
                        if(i == 0)      /* 每个对角线开始打印的第一个和上一个衔接 */
                            a[i][k-i] = a[i][k-1] + 1;
                        else            /*  除了第一个,对角线的元素等于上一个元素加一1*/
                            a[i][k-i] = a[i-1][k-i+1] + 1;
                    }
                    else           /* 与k为偶数的情况类似 */
                    {
                        if( i == 0)
                            a[k-i][i] = a[k-1][i] + 1;
                        else
                            a[k-i][i] = a[k-i+1][i-1] + 1;
                    }
                }
            }
            else  /* 中心对称规律打印下三角 */
            {
                for(i = n-1; i >= 0; i--)
                {
                    for(j = n-i; j < n; j++)
                        a[i][j] = n*n + 1 - a[n-1-i][n-1-j];
                }
            }
    
        }
        for(i = 0; i < n ;i++)     /* 输出蛇形矩阵 */
        {
            for(j = 0; j < n; j++)
            {
                printf("%4d",a[j][i]);
            }
            printf("\n");
        }
    }
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 iqoo11 如何下载安装工程模式
  • ¥15 本题的答案是不是有问题
  • ¥15 关于#r语言#的问题:(svydesign)为什么在一个大的数据集中抽取了一个小数据集
  • ¥15 C++使用Gunplot
  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 蓝桥杯单片机第十三届第一场,整点继电器吸合,5s后断开出现了问题
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?