6PTA7-5 图片旋转

二维图片由一个个像素点组成,目前灰度图像使用一个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

输出样例:

4 8 12
3 7 11
2 6 10
1 5 9
/*第一行:2个整数m和n(<=20)
第二行:2个整数r(只能是90 180 -90中的一个,否则提示:angle data error
第三行以后:输入m行n列的整数数据,必须在0-255之间,否则提示:matrix data error
以上输入的都是整数,若有非整数的数据输入,统一提示:data type error
按要求旋转后的图片矩阵数据*/
/*
import java.util.*;
import java.io.*;
public class Main{
    public static void main(String[] args)
    {
        Scanner in= new Scanner(System.in);
        int n,m;
        int r;
        n=in.nextInt();
        m=in.nextInt();
        r=in.nextInt();
        if(r!=90 && r!=-90 && r!=180){
            System.out.println("angle data error");
            System.exit(0);
        }
        in.nextLine();
        String[][] arr = new String[n][m];
        int i,j;
        int p;//int
        String reg="^\\d+$|-\\d+$";
        
        for(i=0;i<n;i++){
            String s=in.nextLine();
            arr[i]=s.split(" ");
        }
        
        for(i=0;i<n;i++){
            for(j=0;j<m;j++){
                if(!(arr[i][j].matches(reg))){//判断是否是整型
                    System.out.println("data type error");
                    System.exit(0);
                }
                
                p=Integer.parseInt(arr[i][j]);
                if(p<0 || p>255){//判断范围
                    System.out.println("matrix data error");
                    System.exit(0);
                }
                
            }
        }
        if(r==90){
            for(i=m-1;i>=0;i--){
                for(j=0;j<n;j++){
                    if(j==n-1)System.out.print(arr[j][i]);
                    else System.out.print(arr[j][i]+" ");
                }
                System.out.println();
            }
        }else if(r==-90){
            for(i=0;i<m;i++){//4
                for(j=n-1;j>=0;j--){
                    if(j==0)System.out.print(arr[j][i]);
                    else System.out.print(arr[j][i]+" ");
                }
                System.out.println();
            }
        }else if(r==180){
            for(i=n-1;i>=0;i--){
                for(j=m-1;j>=0;j--){
                    if(j==0)System.out.print(arr[i][j]);
                    else System.out.print(arr[i][j]+" ");
                }
                System.out.println();
            }
        }
        in.close();
    }
}*/
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        /*定义*/
        int n,m;
        int r;
        int i,j;
        
        n=in.nextInt();
        m=in.nextInt();
        r=in.nextInt();
        if(r!=90 && r!=-90 && r!=180){//注意:这条判断语句只能放在【输入r语句】的后面,否则程序不予通过。
            System.out.println("angle data error");
            System.exit(0);
        }
        int[][] arr= new int[n][m];
        
        /*输入*/
        for(i=0;i<n;i++){
            for(j=0;j<m;j++){
                if(in.hasNextInt()){//注意:in.hasNextInt()只进行判断,不读取
                    arr[i][j]=in.nextInt();
                    if(arr[i][j]<0 || arr[i][j]>250){//判断是否超出范围
                        System.out.println("matrix data error");
                        System.exit(0);
                    }
                }else{
                    System.out.println("data type error");
                    System.exit(0);
                }
            }
        }
        
        /*计算并输出:三种情况*/
        if(r==90){
            for(i=m-1;i>=0;i--){
                for(j=0;j<n;j++){
                    if(j==n-1)System.out.print(arr[j][i]);//注意:注意格式,行末不要有空格
                    else System.out.print(arr[j][i]+" ");
                }
                System.out.println();
            }
        }else if(r==-90){
            for(i=0;i<m;i++){//4
                for(j=n-1;j>=0;j--){
                    if(j==0)System.out.print(arr[j][i]);
                    else System.out.print(arr[j][i]+" ");
                }
                System.out.println();
            }
        }else if(r==180){
            for(i=n-1;i>=0;i--){
                for(j=m-1;j>=0;j--){
                    if(j==0)System.out.print(arr[i][j]);
                    else System.out.print(arr[i][j]+" ");
                }
                System.out.println();
            }
        }
        in.close();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值