时间限制:1秒
空间限制:65536K
热度指数:5779
算法知识视频讲解
题目描述
输入一个N*N的矩阵,将其转置后输出。要求:不得使用任何数组(就地逆置)。
输入描述:
输入的第一行包括一个整数N,(1<=N<=100),代表矩阵的维数。 接下来的N行每行有N个整数,分别代表矩阵的元素。
输出描述:
可能有多组测试数据,对于每组数据,将输入的矩阵转置后输出。
示例1
输入
3 1 2 3 4 5 6 7 8 9
输出
1 4 7 2 5 8 3 6 9
一种方法是在输入时就转置
#include<cstdio>
int a[100][100];
int main(){
int n;
链接:https://www.nowcoder.com/questionTerminal/0fe4d131737d4138912c3b5df8569245
来源:牛客网
#include <cstdio>
const int N = 100;
void swap(int *a, int *b)
{
int t = *a;
*a = *b;
*b = t;
}
int main()
{
int matrix[N][N];
int n;
while (scanf("%d", &n) != EOF)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
scanf("%d", &matrix[i][j]);
}
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < i; j++)
{
swap(&matrix[i][j], &matrix[j][i]);
}
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n - 1; j++)
{
printf("%d ", matrix[i][j]);
}
printf("%d\n", matrix[i][n - 1]);
}
}
}
while(scanf("%d",&n)!=EOF){ for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ scanf("%d",&a[j][i]); } } for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if(j==n-1)printf("%d\n",a[i][j]); else printf("%d ",a[i][j]); } } } return 0;}
一种是就地转置