首页 > 试题广场 >

矩阵转置

[编程题]矩阵转置
  • 热度指数:51557 时间限制: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 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);
    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 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)
输出空的print()表示换行
n, m = map(int, input().split())
a = []

for i in range(n):
    a.append(list(map(int, input().split())))

for j in range(m):
    for i in range(n):
        print(a[i][j],end=" ")
    print()


编辑于 2024-02-09 22:49:46 回复(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)
#include <bits/stdc++.h>
#include <cwchar>
using namespace std;
int a[100][100];
int main() {
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cin >> a[i][j];
}
}
for (int k = 1; k <= m; k++) {
for (int l = 1; l <= n; l++) {
cout << a[l][k] << " ";
}
cout << endl;
}
return 0;
}
// 64 位输出请用 printf("%lld")
发表于 2025-10-21 17:26:03 回复(0)
#include <stdio.h>

int main()
{
    int m = 0;
    int n = 0;
    scanf("%d %d",&m,&n);
    int arr[10][10] = { 0 };
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            scanf("%d", &arr[i][j]);
        }
    }
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            printf("%d ",arr[j][i]);
        }
        printf("\n");
    }
    return 0;
}
发表于 2025-10-12 11:15:23 回复(0)
#include<iostream>
#include<vector>
using namespace std;
int main()
{
    int a, b;
    cin >> a >> b;
    vector<vector<int>> sz(a+b, vector<int>(a+b));
    for (int i = 1; i <= a; i++)
    {
        for (int j = 1; j <= b; j++)
        {
            cin >> sz[i][j];
        }
    }
    for (int j = 1; j <= b; j++)
    {
        for (int i= 1; i <= a; i++)
        {
            cout << sz[i][j]<<" ";
        }
        cout << endl;
    }
    return 0;
}
发表于 2025-10-09 14:05:55 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        int m = in.nextInt(), n = in.nextInt();
        int[][] a = new int[n][m];
        for (int h=0; h<m; h++) {
            for (int w=0; w<n; w++) {
                a[w][h] = in.nextInt();
            }
        }
        for (int[] outside:a) {
            for(int inside:outside) {
                System.out.printf("%d ", inside);
            }
            System.out.println();
        }
    }
}

发表于 2025-10-09 11:32:40 回复(0)
#include <iostream>
using namespace std;

int main() {
    int n, m;
    cin >> n >> m;
    int a[n][m];
    for (int i = 0 ; i < n ; i++) {
        for (int j = 0 ; j < m ; j++) {
            cin >> a[i][j];
        }
    }
    //转置矩阵输出,行列互换
    for (int i = 0 ; i < m ; i++) {
        for (int j = 0 ; j < n ; j++) {
            cout << a[j][i] << " ";
        }
        cout << endl;
    }
    return 0;
}

发表于 2025-10-05 18:17:38 回复(0)
a1, b1 = input().split()
a, b = int(a1),int(b1)
l = [[0]*a for _ in range(b)]
for i in range(a):
        l1 = list(map(int,input().split()))
        for j in range(b):
            l[j][i] = l1[j]
for i in range(b):
    print(*l[i])
发表于 2025-09-28 11:26:57 回复(0)
n, m = map(int, input().split())
a = []

for i in range(n):
    row = list(map(int, input().split()))
    a.append(row)
for j in range(m):
    for i in range(n):
        print(a[i][j], end=' ')
    print()
发表于 2025-09-26 15:45:16 回复(0)
使用zip直接按列排序,转换为行,无需嵌套循环。
n,m = list(map(int,input().split()))
li = []
for i in range(n):
    text = list(map(str,input().split()))
    li.append(text)
    
for j in list(map(list,zip(*li))):
    print(' '.join(j))


发表于 2025-09-23 21:59:50 回复(0)
import sys
a,b = map(int,input().split())

num =[]

for line in sys.stdin:
    num.append(list(map(int,line.split())))

# print(num)
for j in range(b):
    res = ""
    for i in range(a):
        res+=str(num[i][j])
        res += " "
    print(res)

发表于 2025-09-05 17:47:25 回复(0)
#include <iostream>
using namespace std;

int main() {
    int n, m;
    cin >> n >> m;
    int array[n][m];
    int array2[m][n];
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
            cin >> array[i][j];
        }
    }
    for(int i = 0; i < m; i++){
        for(int j = 0; j < n; j++){
            array2[i][j] = array[j][i];
        }
    }
    for(int i = 0; i < m; i++){
        for(int j = 0; j < n; j++){
            cout << array2[i][j] << " ";
        }
        cout << endl;
    }
}
发表于 2025-08-20 15:59:36 回复(0)