Java实现N*N矩阵旋转(360度)

N*N矩阵旋转

Description
给你一个n*n的矩阵,你的任务是将它逆时针旋转角度d。

[输入]
输入的第一个数为T,表示接下来有T组数据。
每组数据的格式如下:
第一行为两个整数n,d。1<=n<=100,d是90的倍数。
接下来有n行。每行n个整数,每个数之间由一个空格隔开,表示这个矩阵的元素。

[输出]
输出旋转后的矩阵,注意行末不要输出多余的空格。

[样例输入]
2
3 90
1 2 3
4 5 6
7 8 9
4 270
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

[样例输出]
3 6 9
2 5 8
1 4 7
13 9 5 1
14 10 6 2
15 11 7 3
16 12 8 4

package 第六次模拟;

import java.util.Scanner;

public class Demo8旋转 {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		while (n-- > 0) {

			int a = sc.nextInt();
			int b = sc.nextInt();
			int[][] arr = new int[a][b];
			for (int i = 0; i < a; i++) {
				for (int j = 0; j < a; j++) {
					arr[i][j] = sc.nextInt();
				}
			}
			if (b % 360 / 90 == 1)
				fun_90(arr, a, a);
			else if (b % 360 / 90 == 3)
				fun90(arr, a, a);
			else if (b % 360 / 90 == 2)
				fun180(arr, a, a);
			else {
				for (int i = 0; i < a; i++) {
					for (int j = 0; j < a; j++) {
						System.out.print(arr[i][j] + " ");
					}
					System.out.println();
				}
			}
		}
	}

	private static void fun180(int[][] num, int m, int n) {
		// TODO 自动生成的方法存根
		for (int i = m - 1; i >= 0; i--) {
			for (int j = n - 1; j >= 0; j--) {
				System.out.print(num[i][j] + " ");
			}
			System.out.println();
		}

	}

	// 90
	public static void fun90(int[][] num, int m, int n) {
		int[][] shu = new int[m + 1][n + 1];
		for (int i = 1; i <= m; i++) {
			for (int j = 1; j <= n; j++) {
				shu[i-1][j-1] = num[n - j ][i-1]; // 关键点在这
			}
		}
		for (int i = 0; i < m; i++) {
			for (int j = 0; j < n; j++) {
				System.out.print(shu[i][j] + " ");
			}
			System.out.println();
		}
	}

	// -90
	private static void fun_90(int[][] arr, int a, int b) {
		for (int i = b - 1; i >= 0; i--) {
			for (int j = 0; j < a; j++) {
				System.out.print(arr[j][i] + " ");
			}
			System.out.println();
		}
	}

}

原文地址:https://www.cnblogs.com/a1439775520/p/13075995.html