图片旋转 (30 分)(模拟)

简介: 图片旋转 (30 分)(模拟)

二维图片由一个个像素点组成,目前灰度图像使用一个0-255之间的整数表示某个像素点的像素值。编程完成图片旋转控制程序。


本题目要求读入2个整数m和n(<=20),作为图片的长宽尺寸。输入1个整数r,作为旋转角度(只能输入90 180 -90中的一个,90表示图形向左旋转90度,-90表示图形向右旋转90度)。然后按照行列输入图片像素值,


输入格式:

第一行:2个整数m和n(<=20)

第二行:2个整数r(只能是90 180 -90中的一个,否则提示:angle data error

第三行以后:输入m行n列的整数数据,必须在0-255之间,否则提示:matrix data error

以上输入的都是整数,若有非整数的数据输入,统一提示:data type error


输出格式:

按要求旋转后的图片矩阵数据


输入样例:

在这里给出一组输入。例如:

3 4
90
1 2 3 4
5 6 7 8
9 10 11 12


输出样例:

在这里给出相应的输出。例如:

1. 4 8 12
2. 3 7 11
3. 2 6 10
4. 1 5 9


方法一:用整形数组模拟

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int a[][] = new int[30][30];
        int m = in.nextInt();
        int n = in.nextInt();
        int r = in.nextInt();
        int t = 0,i,j;
        if(r != 90 && r != 180 && r != -90) System.out.println("angle data error");
        else
        {
            for(i=0;i<m;i++)
            {
                for(j=0;j<n;j++)
                {
                    if(in.hasNextInt()) a[i][j] = in.nextInt();
                    else t = 1;
                    if(a[i][j] < 0 || a[i][j] > 255)
                        System.out.println("matrix data error");
                }
            }
            if(t == 1) System.out.println("data type error");
            else
            {
                if(r == 90)
                {
                    for(i=n-1;i>=0;i--)
                    {
                        for(j=0;j<m;j++)
                        {
                            if(j != 0) System.out.print(' ');
                            System.out.print(a[j][i]);
                        }
                        System.out.println();
                    }
                }
                else if(r == -90)
                {
                    for(i=0;i<n;i++)
                    {
                        for(j=m-1;j>=0;j--)
                        {
                            if(j != m-1) System.out.print(' ');
                            System.out.print(a[j][i]);
                        }
                        System.out.println();
                    }
                }
                else
                {
                    for(i=m-1;i>=0;i--)
                    {
                        for(j=n-1;j>=0;j--)
                        {
                            if(j != n-1) System.out.print(' ');
                            System.out.print(a[i][j]);
                        }
                        System.out.println();
                    }
                }
            }
        }
    }
}


方法二:用字符串数组模拟

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String a[][] = new String[30][10];
        int m = in.nextInt();
        int n = in.nextInt();
        if(in.hasNextInt())
        {
            int r = in.nextInt();
            int flag = 0;
            if(r != 90 && r != 180 && r != -90)
            {
                System.out.println("angle data error");
                flag = 1;
            }
            int i,j,k;
            int t1 = 0,t2 = 0;
            for(i=0;i<m;i++)
            {
                for(j=0;j<n;j++)
                {
                    String x = in.next();
                    a[i][j] = x;
                    int t = 0;
                    char op[]=x.toCharArray();
                    for(k=0;k<op.length;k++)
                    {
                        if(Character.isDigit(op[k])) t = 0;
                        else t = 1;
                    }
                    if(t == 1) t2 = 1;
                    else
                    {
                        int sum = Integer.parseInt(x);
                        if(sum < 0 || sum > 255) t1 = 1;
                    }
                }
            }
            if(t1 == 1 && flag == 0) System.out.println("matrix data error");
            if(t2 == 1 && t1 == 0 && flag == 0) System.out.println("data type error");
            if(t1 == 0 && t2 == 0 && flag == 0)
            {
                if(r == 90)
                {
                    for(i=n-1;i>=0;i--)
                    {
                        for(j=0;j<m;j++)
                        {
                            if(j != 0) System.out.print(' ');
                            System.out.print(a[j][i]);
                        }
                        System.out.println();
                    }
                }
                else if(r == -90)
                {
                    for(i=0;i<n;i++)
                    {
                        for(j=m-1;j>=0;j--)
                        {
                            if(j != m-1) System.out.print(' ');
                            System.out.print(a[j][i]);
                        }
                        System.out.println();
                    }
                }
                else
                {
                    for(i=m-1;i>=0;i--)
                    {
                        for(j=n-1;j>=0;j--)
                        {
                            if(j != n-1) System.out.print(' ');
                            System.out.print(a[i][j]);
                        }
                        System.out.println();
                    }
                }
            }
        }
        else System.out.print("data type error");
    }
}



目录
相关文章
|
7月前
|
图形学
【unity实战】时间控制 昼夜交替 四季变化 天气变化效果
【unity实战】时间控制 昼夜交替 四季变化 天气变化效果
175 0
|
6月前
|
流计算 Python
Python实现动态银河系:模拟旋转的银河动画
Python实现动态银河系:模拟旋转的银河动画
83 0
|
8月前
|
JavaScript Serverless
Vue 封装一个函数,小球原始高度不固定,弹起比例不固定、计算谈几次后,高度低于1米
Vue 封装一个函数,小球原始高度不固定,弹起比例不固定、计算谈几次后,高度低于1米
33 1
封装一个函数,小球原始高度不固定,弹起比例不固定、计算谈几次后,高度低于1米
封装一个函数,小球原始高度不固定,弹起比例不固定、计算谈几次后,高度低于1米
63 0
|
8月前
|
前端开发
canvas操作图片像素点保证你看的明明白白
canvas操作图片像素点保证你看的明明白白
|
移动开发 小程序 JavaScript
小程序图片左右摆动效果
小程序图片左右摆动效果
119 0
|
算法 C语言 C++
【模拟】特别数的和、移动距离、连号区间、错误票据思路详解及代码实现
取出最后一位,然后将n除去最后一位,将刚刚取出的进行判定。
92 0
|
计算机视觉
Opencv图像处理:判断图片里某个颜色值占的比例
Opencv图像处理:判断图片里某个颜色值占的比例
904 0