算法-合并素数

给一个数组,每次操作可以把相邻的两个素数元素进行合并,
合并后的新数为原来的两个数之和,并删除原来两个数。现在希望最终数组的元素数量尽可能少。

输入
第一行 n 代表数组元素个数
第二行 数组的各个元素
4
7 2 2 3
输出
最终的个数
1

package org.example.XC;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {
}

class Three {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        List<Integer> numbers = new ArrayList<>();

        // 读取数组元素
        for (int i = 0; i < n; i++) {
            numbers.add(scanner.nextInt());
        }

        // 关闭Scanner
        scanner.close();

        for (int i = 0; i < numbers.size(); ) {
            
            if (isSu(numbers.get(i))) { // if (numbers.get(i)==2) {
            // ///
                if (i > 0 && isSu(numbers.get(i - 1)) && isSu(numbers.get(i - 1) + numbers.get(i))) {
                    numbers.set(i - 1, numbers.get(i) + numbers.get(i - 1));
                    numbers.remove(i);
                } else if (i < numbers.size() - 1 && isSu(numbers.get(i + 1)) && isSu(numbers.get(i) + numbers.get(i + 1))) {
                    numbers.set(i, numbers.get(i) + numbers.get(i + 1));
                    numbers.remove(i + 1);
                } else {
                    i++;
                }
            } else {
                i++;
            }
        }

        for (int i = 0; i < numbers.size() - 1; i++) {
            if (isSu(numbers.get(i)) && isSu(numbers.get(i + 1))) {
                numbers.set(i, numbers.get(i) + numbers.get(i + 1));
                numbers.remove(i + 1);
            }
        }
        System.out.println(numbers.size());
    }

    static boolean isSu(int num) {
        if (num <= 1) return false;
        for (int i = 2; i <= Math.sqrt(num); i++) {
            if (num % i == 0) {
                return false;
            }
        }
        return true;
    }
}

第二种

如数组 7 2 2 3,当遇到第一个二时,是不能进行合并的,为了得到最短的结果,我们会使用第二个2和3进行合并,这时,我们就要回退到上一个邻接判断是否为2,再以此个2进行左右合并判断。
第一种方法也可以解决这种问题,但要每个元素进行左右判断,更费时。

class Three2 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        List<Integer> numbers = new ArrayList<>();

        // 读取数组元素
        for (int i = 0; i < n; i++) {
            numbers.add(scanner.nextInt());
        }

        // 关闭Scanner
        scanner.close();

        for (int i = 0; i < numbers.size(); ) {
            if (numbers.get(i) == 2) {
                if (i > 0 && isSu(numbers.get(i - 1)) && isSu(numbers.get(i - 1) + numbers.get(i))) {
                    numbers.set(i - 1, numbers.get(i) + numbers.get(i - 1));
                    numbers.remove(i);
                    i--;
                } else if (i < numbers.size() - 1 && isSu(numbers.get(i + 1)) && isSu(numbers.get(i) + numbers.get(i + 1))) {
                    numbers.set(i, numbers.get(i) + numbers.get(i + 1));
                    numbers.remove(i + 1);
                    i--; //回退 看前一位是不是没用使用过的2
                } else {
                    i++;
                }
            } else {
                i++;
            }
        }

        for (int i = 0; i < numbers.size() - 1; i++) {
            if (isSu(numbers.get(i)) && isSu(numbers.get(i + 1))) {
                numbers.set(i, numbers.get(i) + numbers.get(i + 1));
                numbers.remove(i + 1);
            }
        }
        System.out.println(numbers.size());
    }

    static boolean isSu(int num) {
        if (num <= 1) return false;
        for (int i = 2; i <= Math.sqrt(num); i++) {
            if (num % i == 0) {
                return false;
            }
        }
        return true;
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Github 2024-04-16Python开源项目日报 Top10

根据Github Trendings的统计,今日(2024-04-16统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目10TypeScript项目1Vue项目1系统设计指南 创建周期:2507 天开发语言:Python协议类型:OtherStar数量:241693 个Fork数量:42010 次…

MySql8快速迁移版的制作过程

首先说明&#xff0c;mysql 8的安装不同与mysql5.x。 做程序的朋友都知道&#xff0c;程序好做&#xff0c;客户难伺候&#xff0c;因为限于用户的情况&#xff0c;如何能让用户把程序运行起来很关键&#xff0c;比如日前我在做 山东高中信息技术 学考 考前练习 系统时&#x…

3d模型附加之后怎么分离?---模大狮模型网

在3D建模过程中&#xff0c;有时候我们需要将多个物体合并成一个模型&#xff0c;以便于进行操作或者导出。然而&#xff0c;在某些情况下&#xff0c;我们也需要将这些附加的物体进行分离&#xff0c;以便对它们进行单独的编辑或者处理。本文将介绍在3D建模软件中如何将附加的…

密文字段模糊检索方案

代码地址: https://github.com/zuiyu-main/EncryptDemo https://mp.weixin.qq.com/s/cXOg1tiMtJz2eibDZmXHUQ 在个别特殊领域中&#xff0c;数据的安全问题是非常的重要的&#xff0c;所以需要数据库存储的数据是需要加密存储的。所以也就引申出来本文这个问题&#xff0c;加密…

顺丰同城急送API对接(附源码)

一、背景 最近公司让我对接顺丰同城急送的API&#xff0c;讲讲里面需要注意的几点 官方的API文档有些示例代码也不全&#xff0c;具体细节不多说&#xff0c;如果你现在也需要对接他们API&#xff0c;可以参考本篇博客再配合官方文档结合起来看&#xff0c;可以让您再开发的时…

深度学习--CNN应用--VGG16网络和ResNet18网络

前言 我们在学习这两个网络时&#xff0c;应先了解CNN网络的相关知识 深度学习--CNN卷积神经网络&#xff08;附图&#xff09;-CSDN博客 这篇博客能够帮我们更好的理解VGG16和RetNet18 1.VGG16 1.1 VGG简介 VGG论文网址&#xff1a;VGG论文 大家有兴趣的可以去研读一下…

C++设计模式|创建型 4.建造者模式

1.什么是建造者模式? 建造者模式&#xff08;也被成为生成器模式&#xff09;&#xff0c;是一种创建型设计模式&#xff0c;软件开发过程中有的时候需要创建很复杂的对象&#xff0c;而建造者模式的主要思想是将对象的构建过程分为多个步骤&#xff0c;并为每个步骤定义一个…

共享WiFi贴推广有哪些好处?一文说清

随着科技发展&#xff0c;更加智能高效便捷的共享wifi贴开始越来越多的取代了传统的wifi连接方法。 因为传统的连接WiFi方式确实存在一些不便之处。客人需要手动搜索店铺的WiFi&#xff0c;然后输入复杂的密码进行连接。这一过程不仅繁琐&#xff0c;而且容易出错。有时&#…

稳了!麒麟信安云应用助力国产化生态平稳过渡

2016年国家提出了安全可控体系并大力推进基础硬件、基础软件及应用软件的国产化建设进程。各行业及企事业单位加大国产设备及软硬件的采购力度&#xff0c;逐步完成国产化转型。而操作系统作为上层应用的载体&#xff0c;在信息建设国产化中有着举足轻重的地位。 过去几十年&a…

虚函数求圆形、矩形面积

目录 题目 源码 结果示例 题目 写一个程序&#xff0c;定义抽象基类Shape&#xff0c;由它派生出2个派生类&#xff1a;Circle(圆形)、Rectangle(矩形)&#xff0c;用一个普通函数printarea分别输出以上二者的面积&#xff0c;2个图形的数据在定义对象时给定。 源码 #inc…

软考-系统集成项目管理中级--项目质量管理(输入输出很重要!!!本章占分较高,着重复习)

本章历年考题分值统计 本章重点常考知识点汇总清单 5、成本效益分析法:对每个质量活动进行成本效益分析&#xff0c;就是要比较其可能的成本与预期的效益。达到质量要求的主要效益包括减少返工、提高生产率、降低成本、提升干系人满意度及提升赢利能力。(掌握)17下64考题 本章…

【Flutter】GetX状态管理及路由管理用法

目录 一、安装二、使用1.安装GetX插件&#xff0c;快捷生成模版代码2.主入口MaterialApp改成GetMaterialApp3.定义路由常量RoutePath类、别名映射页面RoutePages类4. 初始initialRoute&#xff0c;getPages。5.调用 总结 一、安装 dependencies: get: ^4.6.6二、使用 1.安装G…

Java八股文4

Linux篇 1.free命令-查看内存状态 free命令用于显示内存状态&#xff0c;它可以提供关于系统内存使用情况的详细信息。这个命令会显示出内存的使用情况&#xff0c;包括实体内存、虚拟的交换文件内存、共享内存区段&#xff0c;以及系统核心使用的缓冲区等。 其中&#xff0c;参…

2024年国内USB Type-C厂商的机遇与挑战分析

USB Type-C接口作为一种全新的连接标准&#xff0c;已经在各种电子设备中得到了广泛的应用。2024年&#xff0c;国内USB Type-C厂商将面临着诸多机遇和挑战&#xff0c;需要全面分析和应对&#xff0c;以确保在竞争激烈的市场中保持竞争力和持续增长。 USB TYPE-C厂商在2024年…

09-ARM开发板的HelloWorld

在ARM开发板上运行x86_64平台程序 前面在Ubuntu系统编译生成了X86_64平台的HelloWorld程序&#xff0c;通过NFS服务器&#xff0c;尝试在开发板上直接运行。 如图所示&#xff0c;程序无法正常运行&#xff0c;终端提示ARM开发板在执行x86架构&#xff08;Intel或AMD&#xff…

【Linux】地址空间虚拟地址

个人主页 &#xff1a; zxctscl 如有转载请先通知 文章目录 1. 虚拟地址1.1 虚拟地址引入1.2 虚拟地址理解1.3 虚拟地址细节问题 2. 地址空间2.1 理解地址空间2.2 页表和写时拷贝 3. 进程调度 1. 虚拟地址 1.1 虚拟地址引入 先先来一个测试代码&#xff1a; 1 #include<st…

Grass注册不了、按钮灰色的解决方案

近期相信grass挂机项目不少人有所有接触。还有不了解这个项目的可以看看博客&#xff1a; http://t.csdnimg.cn/bI4UO 但是不少人注册时遇到无法注册的问题&#xff0c;或者是注册按钮显示灰色&#xff0c;放上鼠标时显示禁止。这也是博主在尝试时遇到的问题。 经过探索&…

如何解决python安装mysqlclient失败问题

在使用Django等框架来操作MySQL时&#xff0c;实际上底层还是通过Python来操作的&#xff0c;首先需要安装一个驱动程序&#xff0c;在Python3中&#xff0c;驱动程序有多种选择&#xff0c;比如有pymysql以及mysqlclient等。使用pip命令安装mysqlclient失败应如何解决&#xf…

【Linux实践室】Linux高级用户管理实战指南:Linux用户与用户组编辑操作详解

&#x1f308;个人主页&#xff1a;聆风吟_ &#x1f525;系列专栏&#xff1a;Linux实践室、网络奇遇记 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 一. ⛳️任务描述二. ⛳️相关知识2.1 &#x1f514;Linux查看用户属性命令2.1.1 &#x1f47b;…

测试用例的编写评审

1、什么叫软件测试用例 什么是测试用例 测试用例(TestCase) 是为项目需求而编制的一组测试输入、执行条件 以及预期结果&#xff0c;以便测试某个程序是否满足客户需求。–测试依据 可以总结为:每一个测试点的数据设计和步骤设计。–测试用例 2、测试用例的重要性(了解) 2.1…
最新文章