首页 > 试题广场 >

矩阵转置

[编程题]矩阵转置
  • 热度指数:46196 时间限制: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}
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)
#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)
#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>
#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)
#include <stdio.h>

int main() {
 int a,b;
   scanf("%d%d",&a,&b);
   int arr[a][b];
   //输入两行三列的二维数组
   for(int i=0;i<a;i++)
   {
    for(int j=0;j<b;j++)
    scanf("%d",&arr[i][j]);
   }
//输出三行两列的二维数组
  for(int i=0;i<b;i++)
   {
    for(int j=0;j<a;j++)
    printf("%d ",arr[j][i]);//列不动,行动
    printf("\n");
   }
    return 0;
}
发表于 2024-08-02 21:08:36 回复(0)
int main()
{
	int n = 0;
	int m = 0;
	int i = 0;
	int j = 0;
	int arr[10][10]; 
	printf("请输入行和列:");
	scanf("%d%d", &n, &m);
	printf("请输入数据:");
	for ( i = 0; i < n; i++)
	{
		for ( j = 0; j < m; j++)
		{
			scanf("%d",&arr[i][j]);
		}
	}
	printf("输入前:\n");
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < m; j++)
		{
			printf("%d ", arr[i][j]);
		}
		printf("\n");
	}
	printf("输入后:\n");
	for ( i = 0; i < m; i++)
	{
		for ( j = 0; j < n; j++)
		{
			printf("%d ", arr[j][i]);
		}
		printf("\n");
	}

	return 0;
}

发表于 2024-07-24 15:52:07 回复(0)
#include <stdio.h>

int main() {
    int n, m;
    scanf("%d %d", &n, &m);
    int arr[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;
}

发表于 2024-02-08 19:06:11 回复(0)
#include <stdio.h>

int main() {
    int arr[10][10] = { 0 };
    int rows = 0;
    int cols = 0;
    int i = 0;
    int j = 0;
    int tem = 0;

    //输入矩阵size
    scanf("%d %d", &rows, &cols);

    //输入矩阵元素
    for (i = 0; i < rows; i++) {
        for (j = 0; j < cols; j++) {
            scanf("%d", &arr[i][j]);
        }
    }

    //输出矩阵
    for (j = 0; j < cols; j++) { //列
        for (i = 0; i < rows; i++) { //行
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }
    return 0;
}

编辑于 2024-02-04 00:17:23 回复(0)
#include <stdio.h>

int main() {
    int n, m;
    scanf("%d %d", &n, &m);

    int arr[10][10] = { 0 };
    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 < m; i++)
    {
        for (j = 0; j < n; j++)
        {
            printf("%d ", arr[j][i]);
        }
        printf("\n");
    }
    return 0;
}
编辑于 2023-12-05 17:29:03 回复(0)
#include <stdio.h>

int main()
{
    int n,m;
    int arr[1000][1000];
    int arr1[1000];
    int count = 0;
    scanf("%d %d",&n,&m);
    for(int i = 0;i<n*m;i++)
    {
        scanf("%d",&arr1[i]);
    }
    //转置
    for(int i = 0;i<n;i++)
    {
        for(int j = 0;j<m;j++)
        {
            arr[j][i] = arr1[count];
            count++;
        }
    }
    //打印
    for(int i = 0;i<m;i++)
    {
        for(int j = 0;j<n;j++)
        {
            printf("%d ",arr[i][j]);
        }
        printf("\n");
    }
    return 0;
}

编辑于 2023-12-01 22:15:59 回复(0)
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
    int n = 0;
    int m = 0;
    scanf("%d%d", &n, &m);
    int arr[100] = { -1 };
    for (int i = 0; i < n * m; i++)
    {
        scanf("%d", &arr[i]);
    }
    for (int i = 0; i < m; i++)
    {
        int j = i;
        int count = 0;
        while (count - n)
        {
            printf("%d ", arr[j]);
            j += m;
            count++;
        }
        printf("\n");
    }
    return 0;
}
发表于 2023-11-20 21:09:16 回复(0)
#include <stdio.h>
int main()
{
    int m,n;
    scanf("%d %d",&n,&m);
    int arr[n][m],ar[m][n];
    int i;
    for(i=0;i<n;i++)
    {
        int j;
        for(j=0;j<m;j++)
        {
            scanf("%d ",arr[i]+j);
            ar[j][i] = arr[i][j];
        }
    }
    for(i=0;i<m;i++)
    {
        int j;
        for(j=0;j<n;j++)
        {
            printf("%d ",ar[i][j]);
        }
        printf("\n");
    }
    

    return 0;
}

发表于 2023-11-12 09:48:39 回复(0)
#include <stdio.h>

int main() {
    int n, m, i, j;
    int a[10][10] = {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;
}
发表于 2023-07-27 16:54:26 回复(0)
#include<stdio.h>
int main()
{
    int n, m;
    scanf("%d %d", &n, &m);
    int arr[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;
}

发表于 2023-04-13 23:46:44 回复(0)
#include <stdio.h>
int main()
{
    int n = 0,m = 0;
    int arr[11][11] = {0};
    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 j = 0;j<m;j++)//列
    {
        for(int i = 0;i<n;i++)//行
        {
            printf("%d ",arr[i][j]);//列不变,行变
        }
        puts("");
    }
    return 0;
}

发表于 2023-03-22 21:54:15 回复(0)
#include <stdio.h>

int main() {
    int a, b;
    scanf("%d %d", &a, &b);
    int num = a * b;
    int arr[num];
    for (int i = 0; i < num; i++) {
        scanf("%d", &arr[i]);
    }
    for(int i=0;i<b;i++)
    {
        for(int j=0;j<a;j++)
        {
            printf("%d ",arr[j*b+i]);
        }
        printf("\n");
    }

    return 0;
}

发表于 2023-03-22 15:44:38 回复(0)
#include <stdio.h>
#include <stdlib.h>
int main(){
    int n, m;
    scanf("%d%d",&n,&m);
    //由外而内创建动态数组
    int **p = (int *)malloc(n * sizeof(int *));
    for(int i = 0; i < n; i++){
        p[i] = (int *)malloc(m * sizeof(int));
    }
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
            scanf("%d",&p[i][j]);
        }
    }
    for(int i = 0; i < m; i++){
        for(int j = 0; j < n; j++){
            printf("%d ",p[j][i]);
        }
        printf("\n");
    }
    //由内而外释放动态数组
    for(int i = 0; i < n; i++){
        free(p[i]);
    }
    free(p);
    return 0;
}

发表于 2022-08-22 14:19:58 回复(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)