挑战难题(一)

晓萌最近在做一个翻转图片的应用,你可能也知道,图片其实是由一个个的点组成的。于是,晓萌想先做一个可以翻转矩阵的程序,来解决他问题的核心部分。
输入第一行包括由空格分开的整数M、N、T(0 < M < 200,0 < N < 200,T=0或1),其中M和N分别表示待处理矩阵的行数与列数,T为0时表示左右翻转,为1时表示上下翻转。
之后的M行,每行包括由空格分隔的N个整数,依次为输入矩阵的每一行的数据。
输出包括M行N列,每个数字之间用一个空格分隔,每一行行末均有一个空格,表示的是按照要求翻转后的矩阵。
样例1
输入:
4 4 1
1 2 3 4
5 6 7 8
9 0 1 2
3 4 5 6
输出:
3 4 5 6 
9 0 1 2 
5 6 7 8 
1 2 3 4
import java.util.Scanner;

public class Main {

public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int M = 0, N = 0, T = 0;
if (input.hasNext()) {
String s = input.nextLine();
String[] split = s.split(" ");
if (split != null && split.length == 3) {
M = Integer.parseInt(split[0]);
N = Integer.parseInt(split[1]);
T = Integer.parseInt(split[2]);
} else {
System.out.println("invalid input");
}
}

int[][] data = getDataArray(input, M, N);
if (T == 0) {
swapLeftRight(data);
} else if (T == 1) {
swapUpDown(data);
}

printData(data);
}

private static int[][] getDataArray(Scanner input, int m, int n) {
int[][] data = new int[m][n];
for (int mi = 0; mi < m; mi++) {
if (input.hasNext()) {
String cols = input.nextLine();
getColArray(mi, n, data, cols);
} else {
// return;
}
}
return data;
}

private static int[][] getColArray(int mi, int n, int[][] data, String cols) {
String[] colArr = cols.split(" ");
if (colArr != null && colArr.length == n) {
for (int ni = 0; ni < colArr.length; ni++) {
int col = Integer.parseInt(colArr[ni]);
data[mi][ni] = col;
}
}
return data;
}

/**
* 对二维数组进行左右翻转
* @param data
*/
private static void swapLeftRight(int[][] data) {
for (int[] ints : data) {
int len = ints.length;
for (int i = 0; i <len -i-1; i++) {
ints[i] = ints[i]+ints[len-i-1];
ints[len-i-1] = ints[i] - ints[len-i-1];
ints[i] = ints[i] - ints[len-i-1];
}
}
}

/**
*对二维数组进行上线翻转
* 处理过程:先进行转置,在进行上下翻转,然后再转置回去
* @param data
*/
private static void swapUpDown(int[][] data) {
int len = data.length;
for (int i = 0; i < len-i-1; i++) {
int[] temp = data[i];
data[i] = data[len-i-1];
data[len-i-1] = temp;
}
}


/**
* 打印二位数组data中的数据
* @param data
*/
private static void printData(int[][] data) {
for (int mi = 0; mi < data.length; mi++) {
int[] ints = data[mi];
for (int ni = 0; ni < ints.length; ni++) {
int anInt = ints[ni];
System.out.print(anInt + " ");
}
System.out.println("");
}
}
}


--来自网页客户端
4.jpg
已邀请:

要回复问题请先登录注册

Template error, template file not found