第十届蓝桥杯Java C组真题 旋转(省赛)

【问题描述】

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

    }
}

你可能感兴趣的:(java,算法)