矩阵转置
分数 5
作者 王跃萍
单位 东北石油大学
将一个3×3矩阵转置(即行和列互换)。
输入格式:
在一行中输入9个小于100的整数,其间各以一个空格间隔。
输出格式:
输出3行3列的二维数组,每个数据输出占4列。
输入样例:
1 2 3 4 5 6 7 8 9
输出样例:
1 4 7
2 5 8
3 6 9
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#include<iostream>
#define MAXSIZE 30
using namespace std;
typedef struct {
int row, col;
int value;
} Triple;
typedef struct {
int rows, cols, fei0;
Triple elem[MAXSIZE];
} Matrix;
Matrix transpose(Matrix a, Matrix b) {
b.cols = a.rows;
b.rows = a.cols;
b.fei0 = a.fei0;
if (a.fei0 > 0) {
for (int i = 0; i < a.cols; i++) {
for (int j = 0; j < a.fei0; j++) {
if (i == a.elem[j].col) {
b.elem[j].row = i;
b.elem[j].col = a.elem[j].row;
b.elem[j].value = a.elem[j].value;
}
}
}
}
return b;
}
int main() {
Matrix a;
a.cols = a.rows = 3;
a.fei0 = 0; // 选定三元组起始位置
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
int x;
cin >> x;
a.elem[a.fei0].row = i;
a.elem[a.fei0].col = j;
a.elem[a.fei0].value = x;
a.fei0++;
}
}
Matrix b;
b.cols = b.rows = 3;
b.fei0 = a.fei0;
for (int i = 0; i < a.fei0; i++) {
int current = a.elem[i].col * b.rows + a.elem[i].row;
b.elem[current].row = a.elem[i].col;
b.elem[current].col = a.elem[i].row;
b.elem[current].value = a.elem[i].value;
}
transpose(a, b);
for (int k = 0; k < 9; k++) {
if (k % 3 == 0 && k > 1)
cout << endl;
cout << " " <<b.elem[k].value;
}
return 0;
}