二維數組操做

題目描述

有一個數據表格爲二維數組(數組元素爲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();
    }
}
相關文章
相關標籤/搜索