题目描述
图片旋转是对图片最简单的处理方式之一,在本题中,你需要对图片顺时针旋转90度。
我们用一个nxm的二维数组来表示一个图片,例如下面给出一个3x4的图片的例子:
1 3 5 7
9 8 7 6
3 5 9 7
这个图片顺时针旋转90度后的图片如下:
3 9 1
5 8 3
9 7 5
7 6 7
给定初始图片,请计算旋转后的图片。
输入描述:
输入的第一行包含两个整数nm,分别表示行数和列数。
接下来n行,每行m个整数,表示给定的图片。图片中的每个元素(像素)为一个值为0至255之间的整数(包含0和255)。
输出描述:
输出m行n列,表示旋转后的图片
那这道题就比较简单了,旋转后的第一行对应的就是旋转前的第一列对吧,那这样很多人就会想不就是
后【i】【j】 = 前【j】【i】
得到的结果却是:
很多人以为直接换就是了,其实不然,你会发现这样替换的话,得到的结果和每一行的次序刚好颠倒了,为什么呢,因为就是第一行第一列的值旋转后要到第一行最后一列去了;
因此应该这样替换
后【i】【j】= 前【n-1-j】【i】
得到的结果是:
这样得到的结果才是正确的
好,直接上代码:
import java.util.Scanner; public class day05 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); //定义行和列 int n; int m; n = scanner.nextInt(); m = scanner.nextInt(); //输入元素值 int[][] image = new int[n][m]; for(int i=0;i<n;i++) { for (int j = 0; j < m; j++) { image[i][j] = scanner.nextInt(); } } //进行值替换 int [][] laterImage = new int[m][n]; for(int i=0;i<m;i++) { for (int j = 0; j < n; j++) { laterImage[i][j] = image[n-1-j][i]; } } //打印结果 for(int i=0;i<m;i++) { for (int j = 0; j < n; j++) { System.out.print(laterImage[i][j] + " "); } System.out.println(); } } }