You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

矩阵波浪形打印结果不符如何修正?含反向波浪实现逻辑

矩阵波浪形打印问题修正与逻辑解析

我需要将矩阵按波浪形打印为7 4 1 2 5 8 9 6 3,但当前的C语言代码输出结果是1 4 7 2 5 8 3 6 9。以下是问题详情、错误代码,以及修正方案和波浪打印逻辑说明:

矩阵示意图

当前错误代码

#include<stdio.h>

int main() {
    int m;
    printf("enter no. of rows of 1st matrix:");
    scanf("%d", &m);

    int n;
    printf("enter no. of columns of 1st matrix:");
    scanf("%d", &n);

    int a[m][n];

    printf("\n enter the elements of 1st matrix");
    for(int i = 0; i < m; i++) {
        for(int j = 0; j < n; j++) {
            scanf("%d", &a[i][j]);
        }
    }

    // wave print
     for(int j = 0; j < n; j++) {
        if(n % 2 == 0) {
            for(int i = 0; i < m-1; i++){
                printf("%d ", a[i][j]);
            }
        }
        else {
            for(int i = 0 - 1; i<=n-1; i++) {
                printf("%d ", a[i][j]);
            }
        }
        printf("\n");
    }

    return 0;
}

一、代码修正

原代码存在两处核心错误:

  1. 错误用总列数的奇偶性判断遍历方向,实际应根据当前列的索引奇偶性决定;
  2. 反向遍历的循环逻辑完全混乱,出现非法负索引,且循环条件错误使用列数而非行数。

修正后的代码如下:

#include<stdio.h>

int main() {
    int m;
    printf("输入矩阵行数:");
    scanf("%d", &m);

    int n;
    printf("输入矩阵列数:");
    scanf("%d", &n);

    int a[m][n];

    printf("\n输入矩阵元素:");
    for(int i = 0; i < m; i++) {
        for(int j = 0; j < n; j++) {
            scanf("%d", &a[i][j]);
        }
    }

    // 波浪形打印
    for(int j = 0; j < n; j++) {
        // 偶数列(从0开始计数):从下往上遍历行
        if(j % 2 == 0) {
            for(int i = m - 1; i >= 0; i--) {
                printf("%d ", a[i][j]);
            }
        } 
        // 奇数列:从上往下遍历行
        else {
            for(int i = 0; i < m; i++) {
                printf("%d ", a[i][j]);
            }
        }
    }
    printf("\n");

    return 0;
}

针对示例中的3×3矩阵,按行输入1 2 3 4 5 6 7 8 9后,运行会输出7 4 1 2 5 8 9 6 3,完全符合预期。

二、正向/反向波浪打印逻辑

1. 正向波浪(示例需求的打印方式)

核心逻辑是按列遍历矩阵,根据列索引奇偶性切换行的遍历方向:

  • 偶数索引列(第0、2、4...列):从最后一行(行索引m-1)向上遍历至第0行;
  • 奇数索引列(第1、3、5...列):从第0行向下遍历至最后一行;
  • 所有列的遍历结果连续输出,形成波浪形效果。

2. 反向波浪(与示例相反的打印方式)

若需要反向波浪,只需调换奇偶列的遍历方向:

  • 偶数索引列:从上到下遍历行;
  • 奇数索引列:从下到上遍历行;
  • 最终会得到类似1 4 7 8 5 2 3 6 9的输出。

内容的提问来源于stack exchange,提问作者Samarth Talreja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 05:58:37