写在所有的前面:
本文采用Java实现代码
目录
题目说明
题目:整数旋转
题目出处
pta
《面向对象程序设计》老师留的实验题
题目描述Description
二维图片由一个个像素点组成,目前灰度图像使用一个0-255之间的整数表示某个像素点的像素值。编程完成图片旋转控制程序。
本题目要求读入2个整数m和n(<=20),作为图片的长宽尺寸。输入1个整数r,作为旋转角度(只能输入90 180 -90中的一个,90表示图形向左旋转90度,-90表示图形向右旋转90度)。然后按照行列输入图片像素值,
输入Input
第一行:2个整数m和n(<=20)
第二行:2个整数r(只能是90 180 -90中的一个,否则提示:angle data error
第三行以后:输入m行n列的整数数据,必须在0-255之间,否则提示:matrix data error
以上输入的都是整数,若有非整数的数据输入,统一提示:data type error
输出Output
按要求旋转后的图片矩阵数据
样例Sample
输入:
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
限制Hint
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
栈限制
8192 KB
解答说明
方案1:输入时旋转
解题思路
在输出时通过调整参数,输出旋转后该位置的数字
一般情况
输入m、n和数组
根据输入的角度调用输出数组
判断三个判断条件,如果不符合要接return退出main方法
特殊情况
判断输入类型:sc.hasNextInt()
if (!sc.hasNextInt())
{
System.out.println("data type error");
}
else
{
//正常输入
}
详情可见:祈望每天自然醒《Java基础 - 判断用户输入的类型Scanner类的hasNextInt(),hasNextFloat()…方法》
https://blog.csdn.net/yeahPeng11/article/details/114900049
代码实现
import java.util.Scanner;
public class Main
{
//main方法
public static void main(String[] args)
{
//加载Scanner类
Scanner sc = new Scanner(System.in);
//输入m、n
int m = sc.nextInt(), n = sc.nextInt();
//定义矩阵
int[][] a = new int[m][n];
//输入旋转度数
int r = sc.nextInt();
//角度错误判断
if (r != 90 && r != -90 && r != 180)
{
System.out.println("angle data error");
return;
}
//输入数组
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
//数据类型判断
if (!sc.hasNextInt())
{
System.out.println("data type error");
return;
}
else
{
a[i][j] = sc.nextInt();
//数据区间为0~255判断
if (a[i][j] < 0 || a[i][j] > 255)
{
System.out.println("matrix data error");
return;
}
}
//旋转90度
if (r == 90) pprint90(m, n, a);
//旋转-90度
else if (r == -90) pprint270(m, n, a);
//旋转180度
else if (r == 180) pprint180(m, n, a);
}
//旋转-90度
static void pprint270(int m, int n, int[][] a)
{
//列从左向右
for (int i = 0; i < n; i++)
{
//行从下到上
for (int j = m - 1; j >= 0; j--)
{
System.out.print(a[j][i]);
if (j != 0) System.out.print(" ");
}
System.out.println();
}
}
//旋转90度
static void pprint90(int m, int n, int[][] a)
{
//列从右向左
for (int i = n - 1; i >= 0; i--)
{
//行从上到下
for (int j = 0; j < m; j++)
{
System.out.print(a[j][i]);
if (j != m - 1) System.out.print(" ");
}
System.out.println();
}
}
//旋转180度
static void pprint180(int m, int n, int[][] a)
{
//行从下到上
for (int i = m - 1; i >= 0; i--)
{
//列从右到左
for (int j = n - 1; j >= 0; j--)
{
System.out.print(a[i][j]);
if (j != 0) System.out.print(" ");
}
System.out.println();
}
}
}