华为OD机试真题B卷 Java 实现【检查是否存在满足条件的数字组合】,附详细解题思路

news2024/12/24 22:07:50

一、题目描述

给定一个正整数数组,检查数组中是否存在满足规则的数字组合

规则:A = B + 2C

二、输入描述

第一行输出数组的元素个数。

接下来一行输出所有数组元素,用空格隔开。

三、输出描述

如果存在满足要求的数,在同一行里依次输出规则里A/B/C的取值,用空格隔开。

如果不存在,输出0。

四、解题思路

  1. 读取输入的数组元素个数n;
  2. 读取数组元素并存储在数组arr中;
  3. 对数组arr进行排序,可以使用快速排序算法,将数组元素按非递减顺序排列;
  4. 初始化变量flag为false,用于标记是否找到满足规则的数字组合;
  5. 使用双重循环遍历数组arr中的元素,假设当前元素为arr[i],并且设定arr[i]为A,寻找满足规则的B和C。
    • 内层循环遍历数组arr中的元素,假设当前元素为arr[j],并且设定arr[j]为B。
    • 计算C的值,C = (A - B) / 2。
    • 从当前位置j+1开始遍历数组arr,寻找是否存在满足arr[k] = C的元素。
    • 如果找到满足条件的C,输出A/B/C的取值,并将flag设置为true,然后结束循环。
  6. 如果在内层循环结束后仍未找到满足规则的数字组合,继续外层循环,遍历下一个元素。
  7. 如果所有元素都遍历完毕仍未找到满足规则的数字组合,则输出0。

该算法通过排序数组并使用双重循环遍历的方式来查找满足规则A = B + 2C的数字组合。在每一轮内层循环中,计算C的值并在后续遍历中查找是否存在相等的元素。算法的时间复杂度为O(n^2),其中n为数组的长度。

五、Java算法源码

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    while (sc.hasNext()) {
        int n = sc.nextInt();
        int[] arr = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = sc.nextInt();
        }
        sort(arr, 0, n - 1);
        int i;
        boolean flag = false;
        for (i = 0; i < n - 1; i++) {
            for (int j = 0; j < n - 1; j++) {
                if (j == i)
                    continue;
                int sum = arr[i] + arr[j] * 2;
                if (sum > arr[n - 1])
                    break;
                int max = Math.max(i, j);
                for (int k = max + 1; k < n; k++) {
                    if (sum == arr[k]) {
                        System.out.println(arr[k] + " " + arr[i] + " " + arr[j]);
                        flag = true;
                        break;
                    }
                }
                if (flag)
                    break;
            }
            if (flag)
                break;
        }
        if (i == n - 1) {
            System.out.println(0);
        }
    }
}

private static void sort(int[] arr, int left, int right) {
    if (left >= right)
        return;
    int sign = arr[left];
    int l = left;
    int r = right;
    while (l < r) {
        while (arr[r] >= sign && l < r)
            r--;
        arr[l] = arr[r];

        while (arr[l] <= sign && l < r)
            l++;
        arr[r] = arr[l];

    }
    arr[l] = sign;
    sort(arr, left, r);
    sort(arr, l + 1, right);
}

六、效果展示

10 = 4 + 2*3

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/603177.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu使用ssh连接两个主机

前提&#xff1a;两者连接同一个WiFi&#xff08;局域网&#xff09; ssh安装&#xff1a; sudo apt-get install openssh-client sudo apt-get install openssh-server 首先在两个主机分别终端输入&#xff1a;ifconfig 查询两者的ip 用户名是前面的那个&#xff1a; …

【算法系列 | 1】深入解析排序算法之冒泡排序

序言 你只管努力&#xff0c;其他交给时间&#xff0c;时间会证明一切。 文章标记颜色说明&#xff1a; 黄色&#xff1a;重要标题红色&#xff1a;用来标记结论绿色&#xff1a;用来标记一级论点蓝色&#xff1a;用来标记二级论点 决定开一个算法专栏&#xff0c;希望能帮助大…

大湾区C++模拟题

大湾区信息学创新大赛模拟题 一、单项选择题&#xff08;15题共30分&#xff09; 1.计算机的运算速度取决于给定的时间内&#xff0c;它的处理器所能处理的数据量。处理器一次能处理的数据量叫字长。已知64位奔腾处理器一次能处理64个信息&#xff0c;相当于&#xff08; A …

厨电「前浪」压「后浪」

作者 | 辰纹 来源 | 洞见新研社 俗话说&#xff0c;姜是老的辣。说的是老年人有经验&#xff0c;办事稳重老练。 俗话也说&#xff0c;长江后浪推前浪。说的是经过历练的新人新事胜过旧人旧事。 这两句话看似矛盾&#xff0c;实则充满哲理&#xff0c;老而弥坚的老手与初生牛…

网关如何让非Matter设备快速加Matter网络?

作为连接智能家居设备的重要桥梁&#xff0c;网关是所有命令请求的入口&#xff0c;并完美充当起“翻译官”的角色。它能够精准“翻译”拥有不同通信协议、数据传输格式及网络地址里所包含的信息&#xff0c;将数据重新打包&#xff0c;以适应目的系统的需求。 虽然网关对于智…

matlab学习笔记(十)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 matlab学习笔记&#xff08;十&#xff09; 一、实验目的二、实验原理和实验内容三、案例运行例1&#xff1a;电磁波传输问题的动态仿真&#xff0c;编写 MATLAB 程序实现线极…

Maven高级——分模块设计与开发

Maven的定义: 一个用来构建和管理java项目的工具。 分模块设计 一个大型项目通常需要有很多功能实现&#xff0c;这些功能分成多个模块&#xff0c;卸载一个项目里面最后只会导致这个项目越来越大。不便于维护&#xff0c;以及组件难以复用。 在项目设计的时候就可以将不同的…

九大亮点+六大好处,瑞云科技虚拟仿真实训平台引领教育信息化新潮流

随着新技术的快速发展和数字化转型的加速推进&#xff0c;高等教育面临着培养创新型、复合型、适应型人才的新要求。 虚拟仿真实训教学作为一种新型的教学模式&#xff0c;能够有效解决实训教学中的高投入、高损耗、高风险及难实施、难观摩、难再现的“三高三难”问题&#xf…

如何运行Python程序?

Python 是一种解释型的脚本编程语言&#xff0c;这样的编程语言一般支持两种代码运行方式&#xff1a; 1) 交互式编程 在命令行窗口中直接输入代码&#xff0c;按下回车键就可以运行代码&#xff0c;并立即看到输出结果&#xff1b;执行完一行代码&#xff0c;你还可以继续输…

手搓一个C++11的线程池(含测试)

实现 首先要有线程池这个结构体&#xff1a; 互斥锁条件变量消息队列关闭标志位 struct Pool {std::mutex mtx;std::condition_variable cond;std::queue<std::function<void()>> tasks;bool isClosed;//用来退出无限循环};【首先是线程池的对象】其实就是维护一…

【数据结构与算法】力扣:二叉树的前、中、后序遍历

递归法 前序遍历 给你二叉树的根节点 root &#xff0c;返回它节点值的前序 遍历。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,2,3] 示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[] 示例 3&#xff1a; 输入&#xff1a;…

IPO后,北森驶向HR SaaS深水区

透过这次发布会&#xff0c;能感知到的依旧是北森马不停蹄的“加速度”&#xff0c;纪伟国口中不断重复的“以客户为中心”&#xff0c;以及不断开放兼容的生态。 作者| 皮爷 出品|产业家 北森&#xff0c;还是那个北森。 在刚刚举办的“HR SaaS未来势”2023北森春季产品…

Vscode搭建开发调试STM32环境IDE

单片机开发IDE环境如KeilMDK&#xff0c;虽然操作简单&#xff0c;方便调试。但就是代码编辑风格很老套&#xff0c;中文符号乱码还是常有的事。而如今流行的vscode编辑器很不错&#xff0c;免费且相当轻量级&#xff0c;用来代码开发体验很不错&#xff0c;看着都舒服。Clion …

swagger在spring项目中的使用

一、Swagger2介绍 前后端分离开发模式中&#xff0c;api文档是最好的沟通方式。 Swagger 是一个规范和完整的框架&#xff0c;用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。 及时性 (接口变更后&#xff0c;能够及时准确地通知相关前后端开发人员)规范性 (并且保…

电子科技大学计算机系统结构复习笔记(一):概述

目录 前言 重点一览 计算机分类 弗林分类法 市场分类 计算机系统结构定义 实现技术\功耗\成本的趋势\可靠性(了解) 计算机性能 性能评价指标 性能评价方法 计算机设计的量化原则 基本方法 Amdahl‘s 定律 CPU 性能公式 / 时间计算 本章小结 前言 本复习笔记基于…

windows环境使用clion搭建redis5.0 redis6.0的源码阅读环境

1、下载cygwin https://cygwin.com/install.html 第一步选择从互联网安装 别放在C盘 选择直接连接 我这边选择的是163的节点 接下来&#xff0c;就是让我们选择要安装的东西&#xff0c;网上一般给的就是如下几个&#xff1a; gcc-core、gcc-g、make、gdb、binutils 一个个…

计算机视觉 | 人体关键点检测与MMPose

前言 人体姿态估计&#xff08;Human Pose Estimation&#xff09;是计算机视觉领域中的一个重要研究方向&#xff0c;也是计算机理解人类动作、行为必不可少的一步&#xff0c;人体姿态估计是指通过计算机算法在图像或视频中定位人体关键点&#xff0c;目前被广泛应用于动作检…

0x34RequestDownload请求下载

0x34RequestDownload 客户端请求协商从客户端到服务器的数据传输。 客户端使用requestDownload服务来启动从客户端到服务器的数据传输&#xff08;下载&#xff09; 。 服务器收到requestDownload请求消息后&#xff0c;服务器应在发送肯定响应消息之前采取所有必要的操作来接…

【手撕Spring源码】深度理解SpringMVC【上】

文章目录 DispatcherServletRequestMappingHandlerMappingRequestMappingHandlerAdapter自定义参数处理器自定义返回值处理器 参数解析器获取参数名对象绑定与类型转换底层第一套转换接口与实现底层第二套转换接口与实现高层转换接口与实现自定义转换器 ControllerAdvice 之 In…

NeRF与三维重建专栏(二)NeRF原文解读与体渲染物理模型

前言 上一章中我们大致介绍了三维重建的背景、NeRF应用于三维重建的难点以及相关数据集和评估指标&#xff0c;本章节将会详细介绍NeRF原文以及部分源码&#xff0c;以及体渲染的物理模型&#xff0c;来帮助读者更好理解NeRF&#xff1b;下一章我们将会结合colmap&#xff0c;讲…