zoukankan      html  css  js  c++  java
  • 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();
    		}
    	}
    
    }
    
    
  • 相关阅读:
    表达式树
    二叉查找树
    二叉树的先中后序遍历
    利用树的先序和后序遍历打印 os 中的目录树
    栈应用(中缀表达式转后缀表达式并计算后缀表达式的值)
    C语言的运算符的优先级与结合性+ASCII表
    算法运行时间中的对数
    c++ primer 第三章 标准库类型
    C++ premier 中文版 学习笔记(第五章 表达式)
    使用applescript脚本方式以管理员权限运行
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13075995.html
Copyright © 2011-2022 走看看