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

我编写的矩阵转置算法仅在特定维度生效,请问代码错误出在哪?

错误根因

你当前使用的原地交换转置逻辑仅适用于行数等于列数的方阵,当处理行列数不等的矩形矩阵时会出现逻辑漏洞:

  • 原交换循环的边界条件仅覆盖了部分元素,没有处理原始矩阵中行索引大于列数、列索引大于行数的位置,导致大量元素没有参与转置,输出中出现的0就是未被处理的初始垃圾值
  • 非方阵的原地转置本身存在维度不匹配的问题,强行原地交换会导致未读取的原始数据被覆盖,无法得到正确结果
修复方案

推荐额外创建转置矩阵存储结果,避免修改原始数据,适配所有合法尺寸的矩阵:

#include <stdio.h>

int main() {
  int WIDTH, HEIGHT, i, j;
  int matrix[100][100];
  // 新增转置矩阵存储结果
  int transposed[100][100];
  do {
    printf("Enter height and width: ");
    scanf("%d %d", &HEIGHT, &WIDTH);
    if ((WIDTH > 100 || HEIGHT > 100) || (WIDTH < 1) || (HEIGHT < 1))
      printf("Dimensions incorrect!\n");
    else
      break;
  } while (1);

  printf("Enter elements: ");
  for (i = 0; i < HEIGHT; i++)
    for (j = 0; j < WIDTH; j++)
      scanf("%d", &matrix[i][j]);

  // 替换原有原地交换逻辑,直接赋值生成转置矩阵
  for (i = 0; i < HEIGHT; i++) {
    for (j = 0; j < WIDTH; j++) {
      transposed[j][i] = matrix[i][j];
    }
  }

  printf("Transposed matrix: \n");
  for (i = 0; i < WIDTH; i++) {
    for (j = 0; j < HEIGHT; j++)
      printf("%5d", transposed[i][j]);
    printf("\n");
  }

  return 0;
}
验证说明

修复后的代码可正常通过你给出的两个测试用例:

  • 输入3 2、元素为1 2 3 4 5 6时,输出和预期的2行3列转置结果完全一致
  • 输入5 1、元素为1 2 3 4 5时,输出和预期的1行5列转置结果完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 14:15:05