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

news/2024/7/24 10:03:48 标签: java, 华为od, 算法, 学习

在这里插入图片描述

一、题目描述

若两个正整数的和为素数,则这两个正整数称之为“素数伴侣”,如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算法源码

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.niftyadmin.cn/n/425933.html

相关文章

12个经典性能测试人员面试题

1、性能测试包含了哪些软件测试&#xff08;至少举出3种&#xff09;&#xff1f; 参考答案&#xff1a;负载测试;压力测试;容量测试;负载测试&#xff08;Load Testing&#xff09;&#xff1a;负载测试是一种主要为了测试软件系统是否达到需求文档设计的目标&#xff0c;譬如…

kubernetes Client 使用

参考连接 github&#xff1a; https://github.com/kubernetes-client/java/ 初次使用 &#xff1a; 测试连接 导入kubernetes-client包 <!--kubernetes--><dependency><groupId>io.kubernetes</groupId><artifactId>client-java</artifactId&…

Maven教程--下(包括手动实现)

Maven教程–下&#xff08;包括手动实现&#xff09; 前言 注意本篇是需要一定的maven基础的 如果没有请移步Maven教程–上 手动创建Maven 项目- 理解Maven 底层机制 需求说明/图解 用手工的方式&#xff0c;创建maven 项目&#xff0c; 深刻理解Maven 工作机制 完成功能…

【SQL】sqladvisor

文章目录 概述架构流程产品特点安装部署使用帮助输出命令行传参调用配置文件传参调用测试一:对小表进行测试测试二&#xff1a;对大表有索引测试测试三&#xff1a;对大表无索引进行测试测试四&#xff1a;多条SQL同时分析&#xff1a; 来源 概述 SQLAdvisor是由美团点评公司技…

PMP项目管理证书是什么?有什么用?

什么是PMP证书&#xff1f; PMP全称是Project Management Professional&#xff0c;中文全称叫项目管理专业人士资格认证&#xff0c;是由美国项目管理协会(PMI)发起&#xff0c;严格评估项目管理人员知识技能是否具有高品质的资格认证考试&#xff0c;目的是为了给项目管理人…

Springboot全文链路id,并ELK搭建部署整合全文链路id

Springboot全文链路id,并ELK搭建部署整合全文链路id 1.docker-compose.yaml部署 version: 3 services:elasticsearch:image: elasticsearch:7.13.2container_name: elasticsearchenvironment:- "cluster.nameelasticsearch" #设置集群名称为elasticsearch- "d…

C# NTS 导出Shapefile (一)

ShapefileWriter&#xff1a;NetTopologySuite.IO.GeoTools, Version1.15.0.0 Feature&#xff1a;NetTopologySuite.Features, Version1.15.0.0 File.Copy(frmEPSGSelect.SelectEPSG.Path, pajFilePath, true);将对应的prj文件拷贝至shapefile目录中 DbaseFieldDescriptor[…

ASEMI代理艾赛斯IXFA14N85XHV功率MOSFET综合指南

编辑-Z 在当今世界&#xff0c;电力电子在各种应用中发挥着至关重要的作用&#xff0c;从电源和电机驱动到电动汽车和可再生能源系统。这些应用中的关键部件之一是功率MOSFET&#xff08;金属氧化物半导体场效应晶体管&#xff09;。IXFA14N85XHV是一款先进的功率MOSFET&#…