冻鸦2345 2021-12-14 19:53 采纳率: 82.6%
浏览 35
已结题

c语言矩阵转置oj,为什么会错误百分之五十

Problem A: Matrix Problem : Array Practice
Time Limit: 1 Sec Memory Limit: 4 MB
Submit: 20828 Solved: 7609
[Submit][Status]
Description
求一个m×n阶矩阵A的转置矩阵AT。矩阵A的每个元素都在int类型的范围之内。

Input
输入的第一行为一个整数M(M>0),后面有M组输入数据。每组数据以两个正整数m和n开始,满足0<m,n<=100,接下来为一个m行n列的矩阵A。

Output
输出为多组,每组输出A的转置矩阵AT。矩阵的输出为:每行两个元素之间用一个空格分开,每行最后一个元素之后为一个换行,在下一行开始输出矩阵的下一行。每两组输出之间用一个空行分隔开。

Sample Input
1
3 3
1 2 3
4 5 6
7 8 9
Sample Output
1 4 7
2 5 8
3 6 9
HINT
二维数组存储矩阵。

Append Code

#include <stdio.h>
#include <stdlib.h>

int main()
{
   int  a,b,n;
   int m[102][102];
   int i,o,j;

   scanf("%d",&n);
   for(j=1; j<=n;j++){

   scanf("%d %d",&a,&b);
   for(i=0; i<a;i++){
   for(o=0;o<b; o++){
      scanf("%d",&m[i][o]);
      }

   }
   for(i=0; i<a;i++){

         for(o=0; o<b;o++){
               if(o==0)printf("%d",m[o][i]);
               else printf(" %d",m[o][i]);
         }
         printf("\n");

   }
   printf("\n");
   }
    return 0;
}


  • 写回答

1条回答 默认 最新

  • 英雄哪里出来 2021年博客之星Top1 2021-12-14 20:22
    关注
    #include <stdio.h>
    #include <string.h>
    
    #define maxn 11
    int mat[maxn][maxn];
    
    void swap(int* a, int* b) {                    // (1)
        int tmp = *a;
        *a = *b;
        *b = tmp;
    }
    
    void maxtrixT(int n, int mat[][maxn]) {        // (2)
        int i, j;
        for(i = 0; i < n; ++i) {
            for(j = i; j < n; ++j) {               // (3)
                swap( &mat[i][j], &mat[j][i] );    // (4)
            }
        }
    }
    
    int main() {
        int n;
        int i, j;
        while(scanf("%d", &n) != EOF) {
            for(i = 0; i < n; ++i) {
                for(j = 0; j < n; ++j) {
                    scanf("%d", &mat[i][j]);
                }
            }
            
            maxtrixT(n, mat);
            
            for(i = 0; i < n; ++i) {
                for(j = 0; j < n; ++j) {
                    if(j) printf(" ");             // (5)
                    printf("%d", mat[i][j]);
                }
                puts("");
            }       
        }
        return 0;
    }
    

    ( 1 ) 利用指针,实现了变量的交换。
    ( 2 ) 转置函数的定义,其中第二个参数是个矩阵,二维数组的高维(即第一维)可以不定义;
    ( 3 ) 注意,这里的 j必须从 i开始枚举,不能从 0 开始,如果不理解,可以试试改成 0 以后,程序的执行结果;
    ( 4 ) 利用 swap实现 mat[i][j] 和 mat[j][i] 的变量交换;
    ( 5 ) 空格作为矩阵输出时的分隔符,之所以这么些,是因为第一个数字之前不需要分隔符;

    付费文章详见(需要的话可以联系我开试读):

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

报告相同问题?

问题事件

  • 系统已结题 12月23日
  • 已采纳回答 12月15日
  • 创建了问题 12月14日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度