首页 > 试题广场 >

矩阵转置

[编程题]矩阵转置
  • 热度指数:46170 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}牛牛有一个矩阵 a_{n,m},他想编写一个程序,计算转置后的矩阵 a_{n,m}^{\top}

【名词解释】
\hspace{15pt}【转置矩阵】转置矩阵是将矩阵的行列互换得到的新矩阵。

输入描述:
\hspace{15pt}在一行中输入两个整数 n,m \left(1 \leqq n,m \leqq 10\right),分别表示矩阵的行数和列数。 
\hspace{15pt}接下来 n 行,每行输入 m 个整数 a_{i,1},a_{i,2},\dots,a_{i,m} \left(-10^{9} \leqq a_{i,j} \leqq 10^{9}\right),用空格分隔。


输出描述:
\hspace{15pt}输出 mn 列,为矩阵的转置结果。每个元素之后使用一个空格。
示例1

输入

2 3
1 2 3
4 5 6

输出

1 4
2 5
3 6

说明

原矩阵为:

\begin{pmatrix}1 & 2 & 3\\4 & 5 & 6\end{pmatrix}

其转置矩阵为:

\begin{pmatrix}1 & 4\\2 & 5\\3 & 6\end{pmatrix}
示例2

输入

1 4
7 8 9 10

输出

7
8
9
10

说明

原矩阵为  :

\begin{pmatrix}7 & 8 & 9 & 10\end{pmatrix}

其转置矩阵为:

\begin{pmatrix}7\\8\\9\\10\end{pmatrix}
#include<stdio.h>
int main(){
    int m,n;
    scanf("%d %d",&m,&n);
    int a[m][n];
    for(int i=0;i<m;i++)
        for(int j=0;j<n;j++)
            scanf("%d",&a[i][j]);
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            printf("%d ",a[j][i]);
        }
        printf("\n");
    }
    return 0;
}

发表于 2021-04-10 16:16:16 回复(1)
#include <stdio.h>

int main(){
    int n, m, arr[10][10];
    scanf("%d %d", &n, &m);
    int i, j = 0;
    for(i = 0; i < n * m; i++, j++)
        scanf("%d", &arr[i / m][j % m]);
    for(i = 0; i < n * m; i++, j++){
        printf("%d ", arr[j % n][i / n]);
        if((j+1) % n == 0)
            printf("\n");
    }
    return 0;
}

发表于 2022-06-09 21:44:50 回复(1)
#include <stdio.h>
int main()
{
    int a[15][15],b[15][15];
    int i,j,n,m,flag=1;
    scanf("%d%d",&n,&m);
    for(i=0;i<n;i++){
        for(j=0;j<m;j++){
            scanf("%d",&a[i][j]);
        }
    }
    for(i=0;i<m;i++){
        for(j=0;j<n;j++){
            printf("%d ",a[j][i]);
        }
        printf("\n");
    }
}

发表于 2020-04-10 18:48:37 回复(0)
#include<stdio.h>
int main() {
    int n, m, arr[10][10];
    scanf("%d %d", &n, &m);
    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)
            scanf("%d", &arr[i][j]);
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++)
            printf("%d ", arr[j][i]);
        printf("\n");
    }
    return 0;
}

发表于 2022-08-06 14:05:15 回复(0)
#include <stdio.h>

int main(){
    int n,m,i,j,flag=0;//flag标示是否矩阵是否相同
    int a[11][11]={0};
    scanf("%d%d",&n,&m);
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
            printf("%d ",a[j][i]);
        }
        printf("\n");
    }
    return 0;
}

发表于 2021-09-07 20:33:59 回复(1)
int main()
{
    int arr[10][10] = {0};
    int n,m = 0;
    scanf("%d %d",&n,&m);
    int i = 0;
    int j = 0;

    for (i=0;i<n;i++)
    {
        for (j=0;j<m;j++)
        {
            scanf("%d",&arr[i][j]);
        }
    }
    i = 0;
    j = 0;
    while (i!=n&&j!=m)
    {
        for (i = 0; i < n; i++)
        {
            printf("%d ", arr[i][j]);
        }
        if (i < n)
        {
            i++;
        }
        if (i == n)
        {
            i=0;
            j++;
            printf("\n");
        }

    }

    return 0;
}
发表于 2024-07-26 11:45:06 回复(0)
#include<stdio.h>
int main()
{
    int n,m,i,j;
    scanf("%d %d",&n,&m);
    int arr[n][m];
    for(i=0;i<n;i++)
        for(j=0;j<m;j++)
            scanf("%d",&arr[i][j]);
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
            printf("%d ",arr[j][i]);//注意输出顺序,没有设两个二维数组
        //而是改变第一个二维数组的输出顺序
        printf("\n");
    }
    return 0;
}

发表于 2021-04-05 14:37:24 回复(1)
# include<bits/stdc++.h>
using namespace std;
int main()
{
    int hang,lie;
    cin>>hang>>lie;
    int arr[hang][lie],arr_num;
    for(int i = 0;i<hang;i++){
        for(int j = 0;j<lie;j++){
            cin>>arr_num;
            arr[i][j] = arr_num;
        }
    }
    for(int i = 0;i<lie;i++){
        for(int j = 0;j<hang;j++){
            cin>>arr_num;
            cout<<arr[j][i]<<" ";
        }
        cout<<endl;
    }
    
}

发表于 2020-10-02 21:39:37 回复(0)
#include <cstdio>
int main(){
    int n, m, a[11][11];
    scanf("%d %d", &n, &m);
    for(int i = 0; i < n; i++)
        for(int j = 0; j < m; j++)
            scanf("%d", &a[i][j]);
    for(int i = 0; i < m; i++){
        for(int j = 0; j < n; j++)
            printf("%d ", a[j][i]);
        printf("\n");
    }
    return 0;
}

发表于 2020-04-18 20:48:01 回复(0)
import sys
n ,m = map(int, input().split())
init = [line.split() for line in sys.stdin]
for i in range(m):
    after = [x[i] for x in init]
    print(*after, sep=" ")
   
发表于 2025-06-18 20:39:26 回复(0)
x, y = map(int, input().split())  # 获取矩阵输入

old = [[0] * y for _ in range(x)]  # 构建输入矩阵

# 填充输入矩阵数据
for i in range(x):
    line = list(map(int, input().split()))
    for j in range(len(line)):
        old[i][j] = line[j]

new = [['0'] * x for _ in range(y)]  # 构建新矩阵

# 填充新矩阵数据
for i in range(y):
    for j in range(x):
        new[i][j] = str(old[j][i])  # 以字符串数字方式填充

for line in new:
    print(' '.join(line))  # 字符串数组可使用join方式拼接一行数据并打印

发表于 2025-06-15 00:17:03 回复(0)
int main()
{
    int a = 0, b = 0;
    int biao = 0;
    scanf("%d%d\n", &a, &b);
    int arr[100] = { 0 };
    for (int i = 0; i < a * b; i++)
    {
        scanf("%d", &arr[i]);

    }
    for (int j = 0; j < b; j++)
    {
        for (int k = 0; k < a; k++)
        {
           
            printf("%d ", arr[j]);
            j += b;
        }
        j = j - (a*b);
        printf("\n");
    }
    return 0;
}
发表于 2025-06-13 21:05:36 回复(0)
n,m = map(int,input().strip().split())

matrix = [list(map(int,input().strip().split())) for _ in range(n)]

tran_matrix = [[0]*n for _ in range(m)]

for i in range(n):
    for j in range(m):
        tran_matrix[j][i] = matrix[i][j]

for row in tran_matrix:
    print(" ".join(map(str,row)))

发表于 2025-06-07 22:56:21 回复(0)
#include <stdio.h>
int main() {
    int a, b;
    while (scanf("%d %d", &a, &b) != EOF) { // 注意 while 处理多个 case
        // 64 位输出请用 printf("%lld") to
        int x[100][100]={0};
        for (int i=0;i<a;i++)
        {
            for (int j=0;j<b;j++)
            {
                scanf("%d",&x[i][j]);
            }
        }
        for (int i=0;i<b;i++)
        {
            for (int j=0;j<a;j++)
            {
                printf("%d ",x[j][i]);
            }
            printf("\n");
        }
    }
    return 0;
}
发表于 2025-05-26 14:45:06 回复(0)
#include <stdio.h>
int main()
{
    int row = 0;
    int colum =0;
    scanf("%d %d",&row,&colum);//这里表示原来矩阵几行几列
    int arr[row][colum];
    for(int i = 0;i< row;i++)
    {
        for(int q = 0;q<colum;q++)
        {
            scanf("%d",&arr[i][q]);
        }
    }
    for(int q = 0;q<colum;q++)//转置行列互换就好
    {
        for(int i = 0;i<row;i++)
        {
            printf("%d ",arr[i][q]);
        }
        printf("\n");
    }
    return 0;
}
发表于 2025-04-18 14:11:38 回复(0)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
  //  printf("你想输入的是__行,__列。输入后按下回车");
    int hang = 0;
    int lie = 0;
    scanf("%d%d", &hang, &lie);
   // printf("请输入你要排序的数据");

    //对输入的数据录入

    int awm = 0;
    int arr[500] = { 0 };

    for (awm = 0; awm < (lie * hang); awm++)
    {
        scanf("%d" ,& arr[awm]);

    }

    int count = 0;

    int plus = 0;
    // for (count = 0; count < 500; count++)
    // {
    //     if (arr[count] != 0)
    //     {
    //         plus++;
    //     }
    //     else
    //     {
    //         break;
    //     }

    // }

    //输入数据录入完毕,开始颠倒矩阵操作
    for (count = 0; count < lie; count++)
    {
        printf("%d ", arr[count]);
        if (hang >= 1)
        {
            for (int count1 = lie + count; count1 < (lie * hang); count1 += lie)
            {
                printf("%d ", arr[count1]);
            }

        }
        printf("\n");

    }

    return 0;
}

发表于 2025-03-07 19:16:46 回复(0)
int main() {
    int m, n;
    scanf("%d %d", &m, &n);
    int matrix[10][10];//数组来存储矩阵
    for (int i = 0; i < m; i++) { //2行
        for (int j = 0; j < n; j++) {
            scanf("%d", &matrix[i][j]);
        }
    }

    for (int j = 0; j < n; j++) { //3行
        for (int i = 0; i < m; i++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }
    return 0;
}
发表于 2025-02-12 01:55:01 回复(0)
#include<stdio.h>
void My_scanf(int arr[10][10],int n, int m)
{
    int i = 0;
    int j = 0;
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        {
            scanf("%d ",&arr[i][j]);
        }
    }
}
void Exchange_arr(int arr1[10][10],int arr2[10][10],int n, int m)
{
    int i = 0;
    int j = 0;
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        {
            arr2[j][i]=arr1[i][j];
        }
    }
}
void arr_printf(int arr[10][10],int n, int m)
{
    int i = 0;
    int j = 0;
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
            printf("%d ",arr[i][j]);
        }
        printf("\n");
    }
}
int main()
{
    int n = 0;
    int m = 0;
    scanf("%d %d",&n,&m);
    int arr1[10][10]={0};
    int arr2[10][10]={0};
    My_scanf(arr1,n,m);
    Exchange_arr(arr1,arr2,n,m);
    arr_printf(arr2,n,m);

    return 0;
}

发表于 2025-01-03 13:40:29 回复(0)
#include <stdio.h>

int main() 
{
    int n,m;
    int arr[n][m]={0};
    scanf("%d %d",&n,&m);
    int i,j;
    for(i=0;i<n;j++)
    {
        for(j=0;j<m;j++)
        scanf("%d",&arr[i][j]);
    }
    for(i=0;i<m;i++)
    {
        for(j=0;j<nj++)
        printf("%d",arr[j][i]);
    }
    printf("\n");
    return 0;
    
}

发表于 2024-12-09 14:06:44 回复(0)
#include<stdio.h>
#define N 10
int main()
{
    int m, n;
    int j, i;
    printf("请输入\n");
    scanf_s("%d %d", &m, &n);
    int a[N][N];
    printf("请输入\n");
    for (i = 0; i <= m-1; i++)
        for (j = 0; j <= n-1 ; j++)
        {
            scanf_s("%d ", &a[i][j]);
        }

    for (i = 0; i <= m - 1; i++)
    {

        for (j = 0; j <= n - 1; j++)
        {
            printf("%d ", a[j][i]);
        }
        printf("\n");
    }
    return 0;

}
发表于 2024-11-11 18:26:11 回复(1)