首页 > 试题广场 >

矩阵转置

[编程题]矩阵转置
  • 热度指数:58261 时间限制: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)
n, m = map(int, input().split())
a = []
for _ in range(n):
    a.append(list(map(str, input().split())))
for j in list(map(list, zip(*a))):
    print(" ".join(j))

发表于 2025-11-05 11:03:56 回复(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)
#include <iostream>
using namespace std;
#include <vector>

int main() {
    int n,m;
    cin >> n >> m;
    vector<vector<int>> v(n,vector<int>(m));
    vector<vector<int>> v1(m,vector<int>(n));
    for(auto& row : v){
        for(auto& val : row){
            cin >> val;
        }
    }
    for(int i = 0; i < m; ++i){
        for(int j = 0; j < n; ++j){
            v1[i][j] = v[j][i];
        }
    }
    for(const auto& row : v1){
        for(const auto& val : row){
            cout << val << ' ';
        }
        cout << endl;
    }
}

发表于 2025-12-16 02:42:14 回复(0)
#include <stdio.h>
int main()
{
    int n=0,m=0;
    scanf("%d %d",&n,&m);
    long long a[n+1][m+1];
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            scanf("%lld",&a[i][j]);
        }
    }
    long long b[m+1][n+1];
    for(int j=0;j<m;j++)
    {
        for(int i=0;i<n;i++)
        {
            b[j][i]=a[i][j];
            printf("%lld ",b[j][i]);
        }
        printf("\n");
    }
    return 0;
}
发表于 2025-11-22 10:54:26 回复(0)
import sys

arrs = [line.strip().split() for line in sys.stdin][1:]
for arr in zip(*arrs):
    print(" ".join(arr))

发表于 2025-10-29 10:57:43 回复(0)
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 <stdio.h>
int main(){
    int n,m;
    scanf("%d%d",&n,&m);
    int a[10][10];
    for(int i=0;i<=n-1;i++)
        for(int j=0;j<=m-1;j++)
        {
            scanf("%d",&a[i][j]);
        }
    for(int i=0;i<=m-1;i++)
    {
        for(int j=0;j<=n-1;j++)
            printf("%d ",a[j][i]);
        printf("\n");
    }
    return 0;
}
发表于 2025-12-22 08:56:39 回复(0)
#include <stdio.h>

int main()
{
    int n = 0;
    int m = 0;
    int arr[10][10] = { 0 };
    int arr_t[10][10] = { 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]);
        }
    }
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
        {
            arr_t[j][i] = arr[i][j];
        }

    }
    for (i = 0; i < m; i++)
    {
        for (j = 0; j < n; j++)
        {
            printf("%d ", arr_t[i][j]);
        }
        printf("\n");
    }
    return 0;
}
发表于 2025-12-03 22:30:14 回复(0)
#include<stdio.h>
int main()
{
    int m, n;
    scanf("%d %d", &m, &n);
    int arr[m][n];
    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;
    }
    return 0;
}

发表于 2025-12-01 17:14:54 回复(0)
n, m = map(int, input().split(" "))
l = [ [i for i in input().split(" ")] for j in range(n)]
for i in range(m):  #  col zhuan row
    for j in range(n) : # row   zhuan col
        print(l[j][i]+" ", end= "")
   
    print()
发表于 2025-11-27 13:50:50 回复(0)
n,m=map(int,input().split())
ll=[[0 for _ in range(m)] for _ in  range(n)]
for i in range(n):
    row=list(map(int,input().split()))
    for j in range(m):
        ll[i][j]=row[j]

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

发表于 2025-11-26 00:13:02 回复(0)
n,m = map(int,input().split())
t = []
x = [[0] * n for _ in range(m)]
for _ in range(n):
    a = list(map(int,input().split()))
    t.append(a)
for i in range(n):
    for j in range(m):
        x[j][i] = t[i][j]
for b in range(m):
    print(" ".join(map(str,x[b])))


发表于 2025-11-18 09:56:50 回复(0)