【问题描述】
图片旋转是对图片最简单的处理方式之一,在本题中,你需要对图片顺时 针旋转 90 度。 我们用一个 n×m 的二维数组来表示一个图片,
例如下面给出一个 3×4 的 图片的例子:
1 3 5
7 9 8
7 6 3
5 9 7
这个图片顺时针旋转 90 度后的图片如下:
5 7 7 1
9 6 9 3
7 3 8 5
【输入格式】
输入的第一行包含两个整数 n 和 m,分别表示行数和列数。 接下来 n 行,每行 m 个整数,表示给定的图片。图片中的每个元素(像 素)为一个值为 0 至 255 之间的整数(包含 0 和 255)。
【输出格式】
输出 m 行 n 列,表示旋转后的图片。
【解题思路】
一个m行n列的数组顺时针旋转90°就变成了一个n行m列的数组,即原数组的第一列就等于新数组的第一行
根据这个思路就可以慢慢的去循环遍历这个数组
public class T4 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int m=sc.nextInt();//数组的行
int n=sc.nextInt();//数组的列
int[][] nums=new int[m][n];//用户输入的数组
//用循环接收数组的值
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
nums[i][j]=sc.nextInt();
}
}
//定义一个新的数组表示用户输入数组顺时针翻转90°的数组
int[][] xi=new int[n][m];
int row=0;//新数组的行
int line=0;//旧数组的列
while (line<n){//把旧数组的列全部遍历完退出
//定义一个for循环,里面两个变量i和j,分别把旧数组的那一行变成新数组的那一列,即旧数组的第一列就是新的数组的第一行
for (int j = 0,i=m-1; i>=0&&j<m ; j++,i--) {
xi[row][j]=nums[i][line];
}
line++;//旧数组遍历完一列下一行
row++;//新数组接收旧数组的数据,接收完一行到下一行
}
//遍历性的数组并打印出来
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
System.out.print(xi[i][j]+" ");
}
System.out.println();
}
}
}