题目描述
图片旋转是对图片最简单的处理方式之一,在本题中,你需要对图片顺时针旋转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();
}
}
}