根据三元组完成转置并输出转置后矩阵
题目描述:
现有一个三元组,请你帮忙完成转置,输出转置后的三元组,并输出转置后的矩阵。
输入:
输入包括若干个测试用例,第一行为一个正整数k,表示用例数,接下来k个用例,每个用例给出原三元组,其中第一行三个正整数c,n,m,分别表示非零元素个数、行数,列数,然后c行,每行也是三个正整数,i,j,v即对应每个非零元素的行标,列标及值。
输出:
对每一个测试用例,先输出转置后的三元组(第一行仍为非零元素个数、行数、列数),然后输出转置后的矩阵,各元素之间用一个空格隔开。
输入样例:
2
2 3 3
1 2 7
2 1 8
3 5 6
1 4 9
3 1 8
5 2 6
输出样例:
2 3 3
1 2 8
2 1 7
0 8 0
7 0 0
0 0 0
3 6 5
1 3 8
2 5 6
4 1 9
0 0 8 0 0
0 0 0 0 6
0 0 0 0 0
9 0 0 0 0
0 0 0 0 0
0 0 0 0 0
思路:
行列反过来存储就可以了,对应的位置存储value;
代码如下:
import java.util.Scanner; public class TestMain { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int number = sc.nextInt(); while (number-- != 0) { int number_1 = sc.nextInt(); int hang = sc.nextInt(); int lie = sc.nextInt(); int max = hang>lie?hang:lie; int flag[][] = new int[max + 1][max + 1]; for (int i = 0; i < number_1; i++) { int x = sc.nextInt(); int y = sc.nextInt(); int value = sc.nextInt(); flag[y][x] = value; } System.out.println(number_1+" "+lie+" "+hang); for (int i = 1; i <= lie; i++) { for (int j = 1; j <= hang; j++) { if(flag[i][j]!=0) System.out.println(i+ " "+j+" "+flag[i][j]); } } for (int i = 1; i <= lie; i++) { for (int j = 1; j <= hang; j++) { System.out.print(flag[i][j] + " "); } System.out.println(); } } } }