根据三元组完成转置并输出转置后矩阵

题目描述:
现有一个三元组,请你帮忙完成转置,输出转置后的三元组,并输出转置后的矩阵。
输入:
输入包括若干个测试用例,第一行为一个正整数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();
			}
		}

	}

}

猜你喜欢

转载自blog.csdn.net/zjwsa/article/details/78946856