华为OD机试 - 二维数组操作 (Java 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题 点这里

实战项目访问:http://javapub.net.cn/

专栏导读

本专栏收录于 《华为OD机试(JAVA)真题(E卷+D卷+A卷+B卷+C卷)》

刷的越多,抽中的概率越大,私信javapub,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。


二维数组操作

在这里插入图片描述

本题含有多组样例输入!行列从0开始标号。

数据范围:数据组数: 1≤t≤5
进阶:时间复杂度: O(1) ,空间复杂度: O(1)

输入描述:

输入数据按下列顺序输入:1 表格的行列值2 要交换的两个单元格的行列值3 输入要插入的行的数值4 输入要插入的列的数值5 输入要查询的单元格的坐标

输出描述:

输出按下列顺序输出:1 初始化表格是否成功,若成功则返回0, 否则返回-1 2 输出交换单元格是否成功3 输出插入行是否成功4 输出插入列是否成功5 输出查询单元格数据是否成功

示例1

输入

4 9
5 1 2 6
0
8
2 3
4 7
4 2 3 2
3
3
4 7

输出

本组样例共有2组样例输入。
第一组样例:
1.初始化数据表为4行9列,成功
2.交换第5行1列和第2行6列的数据,失败。因为行的范围应该是(0,3),不存在第5行。
3.在第0行上方添加一行,成功。
4.在第8列左边添加一列,失败。因为列的总数已经达到了9的上限。
5.查询第2行第3列的值,成功。
第二组样例:
1.初始化数据表为4行7列,成功
2.交换第4行2列和第3行2列的数据,失败。因为行的范围应该是(0,3),不存在第4行。
3.在第3行上方添加一行,成功。
4.在第3列左边添加一列,成功。
5.查询第4行7列的值,失败。因为虽然添加了一行一列,但数据表会在添加后恢复成4行7列的形态,所以行的区间仍然在[0,3],列的区间仍然在[0,6],无法查询到(4,7)坐标。

Java 编程

package cn.net.javapub.demo2.demo;

/**
 * @author: shiyuwang
 * @url: http://javapub.net.cn
 */

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = null;
        while ((str = br.readLine()) != null) {
            String[] strs = str.split(" ");
            //1. 行和列
            int row = Integer.parseInt(strs[0]);
            int column = Integer.parseInt(strs[1]);
            if (row >= 0 && row <= 9 && column >= 0 && column <= 9) {
                System.out.println("0");
            } else {
                System.out.println(-1);
            }

            //2.单元格的 行 列值
            String[] values = br.readLine().split(" ");
            int rowValue1 = Integer.parseInt(values[0]);
            int columnValue1 = Integer.parseInt(values[1]);

            int rowValue2 = Integer.parseInt(values[2]);
            int columnValue2 = Integer.parseInt(values[3]);

            if (rowValue1 >= 0 && rowValue1 < row && rowValue2 >= 0 && rowValue2 < row
                    && columnValue1 >= 0 && columnValue1 < column && columnValue2 >= 0 && columnValue2 < column) {
                System.out.println(0);
            } else {
                System.out.println(-1);
            }

            //3. 插入的行的值
            int insertRowValue = Integer.parseInt(br.readLine());
            if (insertRowValue >= 0 && insertRowValue < row && (row + 1) <= 9) {
                System.out.println(0);
            } else {
                System.out.println(-1);
            }
            //4. 插入的列的值
            int insertColumnValue = Integer.parseInt(br.readLine());
            if (insertColumnValue >= 0 && insertColumnValue < column && (column + 1) <= 9) {
                System.out.println(0);
            } else {
                System.out.println(-1);
            }
            //5. 运动轨迹的单元格
            strs = br.readLine().split(" ");
            int x = Integer.parseInt(strs[0]);
            int y = Integer.parseInt(strs[1]);
            if (x >= 0 && x < row && y >= 0 && y < column) {
                System.out.println(0);
            } else {
                System.out.println(-1);
            }
        }
        br.close();
    }
}

展示效果:

在这里插入图片描述

🏆下一篇: 华为OD机试 - 将真分数分解为埃及分数 (Java 2024 E卷 100分)
🏆本文收录于, 搬砖工逆袭Java架构师

刷的越多,抽中的概率越大,私信javapub,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

优质合集推荐

《突击面试》Java面试题合集
《面试1v1》
《编程工作总结》
  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏