題目描述
有一個數據表格爲二維數組(數組元素爲int類型),行長度爲ROW_LENGTH,列長度爲COLUMN_LENGTH。對該表
格中數據的操做能夠在單個單元內,也能夠對一個整行或整列進行操做,操做包括交換兩個單元中的數據;插入某
些行或列。
請編寫程序,實現對錶格的各類操做,並跟蹤表格中數據在進行各類操做時,初始數據在表格中位置的變化軌跡。
詳細要求:
1.數據表規格的表示方式爲「行*列」, 數據表元素的位置表示方式爲[行,列],行列均從0開始編號
2.數據表的最大規格爲9行*9列,對錶格進行操做時遇到超出規格應該返回錯誤
3.插入操做時,對m*n表格,插入行號只容許0~m,插入列號只容許0~n。超出範圍應該返回錯誤
4.只需記錄初始表格中數據的變化軌跡,查詢超出初始表格的數據應返回錯誤
例如: 初始表格爲4*4,可查詢的元素範圍爲[0,0]~[3,3],假設插入了第2行,數組變爲5*4,
查詢元素[4,0]時應該返回錯誤
5.查詢數據要求返回一個鏈表,鏈表中節點的順序即爲該查詢的數據在表格中的位置變化順序(需包含初始位置)
輸入描述
輸入數據按下列順序輸入:
1 表格的行列值
2 要交換的兩個單元格的行列值
3 輸入要插入的行的數值
4 輸入要插入的列的數值
5 輸入要獲取運動軌跡的單元格的值
輸出描述
輸出按下列順序輸出:
1 初始化表格是否成功,若成功則返回0, 不然返回-1
2 輸出交換單元格是否成功
3 輸出插入行是否成功
4 輸出插入列是否成功
5 輸出要查詢的運動軌跡的單元查詢是否成功
輸入例子
3 4
1 1
0 1
2
1
2 2
輸出例子
0
0
0
0
0
算法實現
import java.util.Scanner;
/**
* Declaration: All Rights Reserved !!!
*/
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Scanner scanner = new Scanner(Main.class.getClassLoader().getResourceAsStream("data.txt"));
while (scanner.hasNext()) {
int[] arr = new int[10];
for (int i = 0; i < 10; i++) {
arr[i] = scanner.nextInt();
}
System.out.print(solve(arr));
}
scanner.close();
}
private static String solve(int[] arr) {
int[] result = new int[5];
// 檢查行列值
if (arr[0] < 0 || arr[0] > 9 || arr[1] < 0 || arr[1] > 9) {
result[0] = -1;
} else {
result[0] = 0;
}
// 檢查交換單元格是否合法
if (result[0] == 0 && (arr[2] >= 0 && arr[2] < arr[0] && arr[3] >= 0 && arr[3] < arr[1])
&& (arr[4] >= 0 && arr[4] < arr[0] && arr[5] >= 0 && arr[5] < arr[1])) {
result[1] = 0;
} else {
result[1] = -1;
}
// 檢查插入行是否成功
if (result[0] == 0 && (arr[6] >= 0 && arr[6] < arr[0])) {
result[2] = 0;
} else {
result[2] = -1;
}
// 檢查插入列是否成功
if (result[0] == 0 && (arr[7] >= 0 && arr[7] < arr[1])) {
result[3] = 0;
} else {
result[3] = -1;
}
// 檢查訪問是否成功
if (result[0] == 0 && (arr[8] >= 0 && arr[8] < arr[0] && arr[9] >= 0 && arr[9] < arr[1])) {
result[4] = 0;
} else {
result[4] = -1;
}
StringBuilder b = new StringBuilder();
for (int i : result) {
b.append(i).append('\n');
}
return b.toString();
}
}