华为OD机试真题 Java 实现【素数伴侣】【2023 B卷 100分】,附详细解题思路

news2024/9/21 0:27:35

在这里插入图片描述

一、题目描述

若两个正整数的和为素数,则这两个正整数称之为“素数伴侣”,如2和5、6和13,它们能应用于通信加密。现在密码学会请你设计一个程序,从已有的 N ( N 为偶数)个正整数中挑选出若干对组成“素数伴侣”,挑选方案多种多样,例如有4个正整数:2,5,6,13,如果将5和6分为一组中只能得到一组“素数伴侣”,而将2和5、6和13编组将得到两组“素数伴侣”,能组成“素数伴侣”最多的方案称为“最佳方案”,当然密码学会希望你寻找出“最佳方案”。

有一个正偶数 n ,表示待挑选的自然数的个数。后面给出 n 个具体的数字。

输出一个整数 K ,表示你求得的“最佳方案”组成“素数伴侣”的对数。

数据范围: 1≤n≤100,输入的数据大小满足 2≤val≤30000

二、输入描述

输入一个正偶数 n

输入 n 个整数

三、输出描述

求得的“最佳方案”组成“素数伴侣”的对数。

四、解题思路

  1. 从输入中读取一个正偶数n;
  2. 创建一个长度为n的整数数组nums,用于存储n个整数;
  3. 循环读取n个整数,将其存储到nums数组中;
  4. 创建两个列表,一个用于存储偶数,一个用于存储奇数。遍历nums数组,将偶数存储到偶数列表(evens)中,将奇数存储到奇数列表(odds)中;
  5. 创建一个长度为偶数列表evens的整数数组evenMatch,用于存储每个偶数的伴侣奇数。初始化count为0,用于记录素数伴侣的对数;
  6. 对每个奇数进行匹配操作。遍历奇数列表odds,依次取出一个奇数odd;
    • 创建一个布尔数组match,用于记录每个偶数是否已被占用。初始化为false;
    • 使用递归函数find()进行偶数的匹配。在find()函数中,依次遍历偶数列表evens,取出一个偶数even;
      • 如果该偶数未被占用且偶数与奇数的和是素数(调用isPrime()函数判断),则将该奇数设置为偶数的伴侣,即evenMatch[i] = odd,并将该偶数设置为已占用(match[i] = true);
      • 如果该偶数已被其他奇数占用,则递归调用find()函数,寻找其他可匹配的偶数;
    • 如果能找到素数匹配,则count加1;
  7. 输出count,即最佳方案组成素数伴侣的对数。

五、Java算法源码

public static void main(String [] args){
    Scanner in = new Scanner(System.in);
    while(in.hasNext()){
        int n = in.nextInt();
        //定义数组
        int [] nums = new int[n];
        for(int i = 0;i < n ;i++){
            nums[i] = in.nextInt();
        }
        // 存储偶数
        List<Integer> evens = new ArrayList<Integer>();
        // 存储奇数
        List<Integer> odds = new ArrayList<Integer>();

        for(int num:nums){
            if(num % 2 ==0){
                evens.add(num);
            }else{
                odds.add(num);
            }
        }

        // 存储每个偶数的伴侣奇数
        int [] evenMatch = new int[evens.size()];
        // 素数伴侣的对数
        int count = 0;
        // 用每个奇数 尝试匹配偶数
        for(int i = 0;i < odds.size();i++){
            int odd = odds.get(i);
            // 创建一个布尔数组match,用于记录每个偶数是否已被占用
            boolean [] match = new boolean[evens.size()];
            // 如果能找到素数匹配,则count加1
            if(find(odd,evens,evenMatch,match)){
                count++;
            }
        }

        // 最佳方案组成素数伴侣的对数
        System.out.println(count);
    }
}

// 使用递归函数find()进行偶数的匹配
private static boolean find(int odd,List<Integer> evens,int [] evenMatch,boolean [] match){
    for(int i = 0;i < evens.size();i++){
        int even = evens.get(i);
        // 如果该偶数未被占用且偶数与奇数的和是素数
        if(!match[i] && isPrime(even + odd)){
            // 访问标记
            match[i] = true;
            // 如果该偶数已被其他奇数占用,则递归调用find()函数,寻找其他可匹配的偶数
            if(evenMatch[i] == 0 || find(evenMatch[i],evens,evenMatch,match)){
                // 将该奇数设置为偶数的伴侣
                evenMatch[i] = odd;
                return true;
            }
        }
    }
    return false;
}

// 是否是素数
private static boolean isPrime(int x){
    if(x == 1){
        return false;
    }
    for(int i = 2; i <= (int)Math.sqrt(x);i++){
        if(x % i == 0){
            return false;
        }
    }
    return true;
}

六、效果展示

在这里插入图片描述


🏆下一篇:华为OD机试真题 Java 实现【跳房子II】【2023 B卷 100分】,附详细解题思路

🏆本文收录于,华为OD机试(JAVA)(2022&2023)

本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。

在这里插入图片描述

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

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

相关文章

13.常用类|Java学习笔记

文章目录 包装类包装类型和String类型的相互转换Integer类和Character类的常用方法Integer创建机制&面试题 String类创建String对象的两种方式和区别字符串的特性String类的常用方法 StringBuffer类String和StringBuffer相互转换StringBuffer常用方法 StringBuilder类Strin…

Java实训日志01

文章目录 一、安装录屏软件&#xff08;一&#xff09;下载软件&#xff08;二&#xff09;安装软件 二、使用录屏软件三、安装XMind软件&#xff08;一&#xff09;下载XMind软件&#xff08;二&#xff09;安装XMind软件 四、创建思维导图&#xff08;一&#xff09;启动XMin…

如何评价广告营销效果

广告营销的目的 广义上的营销&#xff0c;2个主要目的&#xff1a;达成销售和建设品牌&#xff0c;其实后者的终极目的还是前者。销售是短期达成&#xff0c;品牌建设是长期管理。 广告是营销的一部分&#xff0c;广告的效果评估也应该从目的出发探寻方法。 网络广告的特性 网…

2023Fiddler学习笔记 -- 状态栏及辅助选项卡

接上节课内容 2023Fiddler抓包学习笔记 -- 环境配置及工具栏介绍 2023Fiddler抓包学习笔记 -- 如何在会话窗口添加ip列 一、状态栏 1、上面黑色的框框&#xff0c;可以输入相关命令实现操作&#xff0c;比如&#xff1a;bpu baidu&#xff0c;只要url里包含baidu的网站都会被…

Socket 传情:用 Python 编织 TCP 网络

文章目录 参考描述TCP 服务器端与 TCP 客户端通信的基本流程服务器端客户端 使用 socket 实现 TCP 服务器端实现监听套接字socket.socket()Socket().bind()IP 地址的选择本地回环地址某一特定 IP 地址空字符串 Socket().listen()监听套接字的实现 实现连接套接字Socket().accep…

【I2C】Linux使用GPIO模拟I2C

文章目录 1. I2C GPIO系统架构简介2. 如何使能I2C GPIO驱动2.1 config配置2.2 dts配置2.3 测试验证 3. 简单分析i2c-gpio.c驱动3.1 解析设备树3.2 配置SDA和SCL3.3 注册到i2c-algo-bit.c 4. 简单分析i2c-algo-bit.c驱动4.1 提供I2C通信时的算法4.2 注册Adapter 5. 参考资料 1. …

翻车了,被读者找出 BUG

大家好呀&#xff0c;我是小楼。 本文是上篇文章《使用增强版 singleflight 合并事件推送&#xff0c;效果炸裂&#xff01;》的续集&#xff0c;没看过前文必须要先看完才能看本文&#xff0c;实在不想看&#xff0c;拉到文章末尾&#xff0c;给我点个赞再退出吧~Doge 上篇文…

如何进行App性能测试?SoloPi是最佳选择!

目录 引言 SoloPi简介 SoloPi特点 SoloPi的主要功能 下载SoloPi 安装SoloPi 使用SoloPi进行性能测试 性能数据查看与记录 环境加压 响应耗时计算工具 注意事项 Solopi提供的各项性能指标介绍 引言 大家好&#xff01;我是凡哥。 今天我想跟你们分享一下如何进行A…

Python的接口自动化-读写excel文件

目录 引言 一、xlrd、xlwt以及xlutils安装 二、xlrd操作excel文件的数据读取 三、xlwt向excel文件写入数据 四、xlutils操作excel文件 五、封装操作excel读和写的类 引言 使用python进行接口测试时常常需要接口用例测试数据、断言接口功能、验证接口响应状态等&#xff0…

Mysql升级8.0后日期类型兼容性问题

背景 最近对原有项目数据库进行升级&#xff0c;从MySQL 5.7 升级到8.0&#xff0c;因此项目种的驱动程序也要做相应升级。 问题 一、 升级后报&#xff1a;java.time.LocalDateTime cannot be cast to java.util.Date 该问题是因为代码中使用Map类型获取查询返回值&#xf…

lightdb检测不兼容工具CheckUnsupportOracle使用说明

oracle有很多特性在lightdb无法使用&#xff0c;使用该工具可以即时扫描某个在线数据库或本地文件夹中有哪些不兼容特性&#xff0c;-a -x对oracle不兼容特性有所区别&#xff0c;扫描范围可参考后续表格。 0、使用限制 默认扫描存储过程&#xff0c;函数及包默认仅支持oracl…

19JS10——预解析

文章目录 一、预解析二、变量预解析和函数预解析三、预解析案例1、案例1&#xff1a;结果是几&#xff1f;2、案例2&#xff1a;结果是几&#xff1f;3、案例3&#xff1a;结果是几&#xff1f;4、案例4&#xff1a;结果是几&#xff1f; 目标&#xff1a; 1、预解析 2、变量预…

电脑连上wifi但显示无网解决方案分享,轻松搞定电脑上网问题

有的时候我们会遇到这样的问题&#xff1a;电脑明明连接了网络但仍不能上网&#xff0c;并且出现错误提示“WiFi已连接但没有互联网”。遇到这种情况&#xff0c;我们可以先使用另一台设备访问网络&#xff0c;看看你能否正常上网。如果也不能上网&#xff0c;可以尝试重新启动…

七牛云存储开启referer防盗链后,微信小程序访问提示403

点击七牛云存储存储桶绑定的加速域名 配置站点域名和微信小程序域名 是否允许空Referer一定要打开&#xff0c;否则小程序上的视频或图片访问时将提示403

# 如何在Git上更改本地分支名称和远程分支名称

有时候我们需要修改git分支名称&#xff0c;例如不合理的分支名称。本篇文章分享了如何轻松地修改Git本地分支名称和修改远程分支名称。 在Git中&#xff0c;通常使用分支来使开发与您的主要工作流程分开。在软件工程团队中&#xff0c;通常要实施特定的工作流程。例如&#x…

[C语言实现]数据结构之《关于我转生成队列这档事》

&#x1f970;作者: FlashRider &#x1f30f;专栏: 数据结构 &#x1f356;知识概要&#xff1a;详解队列的概念、顺序队列和链式队列的优点和缺点&#xff0c;以及代码实现。 目录 什么是队列&#xff1f; 选择什么结构来实现队列&#xff1f; 链式队列的实现 队列的结构…

在UE中使用Stencil功能

Stencil是指利用深度buffer的后8位数据进行bit mask信息的绘制&#xff0c;从而制作类似角色mask遮罩等效果&#xff0c;下面就在UE中进行制作。 1.首先在Project Settings项目设置中开启stencil&#xff0c;搜索stencil关键字在Custom Depth Stencil Pass选项中设置为Enabled…

PNAS:勘探地球物理学论文

阅读 《Sensing prior constraints in deep neural networks for solving exploration geophysical problems dendrimers》 题目译为《深度神经网络中用于解决勘探地球物理问题的感知先验约束》 研究意义 该研究提出三种可能的策略&#xff0c;以有效地讲地质和/或地球物理约…

面试官再问分布式事务,三天吃透这份至尊级学习笔记怼他

分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。简单的说&#xff0c;就是一次大的操作由不同的小操作组成&#xff0c;这些小的操作分布在不同的服务器上&#xff0c;且属于不同的应用&#xff0c;分布式…

ABAP 新语法--Open SQL(草稿)

1. 常量 1.1 常量赋值 常量字段可以用来为内表中的部分字段赋初始值&#xff0c;字段类型和长度依据输入常量的值决定 SELECTmara~matnr, " 物料号mara~matkl, " 物料组mara~mtart, " 物料类型 AS lkenz, " 删除标识&#xff0c;常量空字符串123 AS fla…