算法-合并素数

news/2024/5/2 22:04:13

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

输入
第一行 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());}// 关闭Scannerscanner.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());}// 关闭Scannerscanner.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.mrgr.cn/p/81840863

相关文章

OpenStack 入门体验

目录 一、云计算概述 1.1、什么是云计算 1.2、云计算的服务模型 1&#xff09;IaaS 2&#xff09;PaaS 3&#xff09;SaaS 1.3、OpenStack 概述 1&#xff09;OpenStack 起源 2&#xff09;什么是 OpenStack 3&#xff09;OpenStack 优势 二、OpenStack 一…

品牌百度百科词条创建多少钱?

百度百科作为国内最具权威和影响力的知识型平台&#xff0c;吸引了无数品牌和企业争相入驻。一个品牌的百度百科词条&#xff0c;不仅是对品牌形象的一种提升&#xff0c;更是增加品牌曝光度、提高品牌知名度的重要途径。品牌百度百科词条创建多少钱&#xff0c;这成为了许多企…

Ubuntu 22.04中使用微信

刚开始装了一个优麒麟原装的微信,真的好难用,就只能发送接受个文字消息,所以还是推荐安装wine版本的,链接如下:https://www.ubuntukylin.com/applications/119-cn.html 还是推荐离线安装,在线安装wine环境时容易出问题,根据它的教程安装即可~ 1、Wine环境安装: 下载链…

解析SAP系统在企业成本管理中的关键作用与优势

成本管理对于企业的可持续发展至关重要,而SAP系统作为领先的企业资源规划软件,在企业成本管理中发挥着重要作用。本文将分析SAP系统在企业成本管理中的重要性,探讨SAP系统如何帮助企业降低成本、提高效率,以及实现可持续发展的过程。第一部分:SAP系统的全面性 SAP系统是企…

python 正则表达式匹配

re模块: 案例: python的贪婪和非贪婪 r的作用:

python 修改jenkins的配置文件

python有jenkins获取配置文件的api,也有修改配置文件的api, 下面介绍下 如果修改jenkins job的配置文件内容:import re import time import jenkinsjenkins_url="http://xxx.com/jenkins" username="zhangsan" token="1.......de"jenkins = je…

基于SkyEye运行Qt:著名应用程序开发框架

Qt是一个著名的跨平台的C++图形用户界面应用程序开发框架,目前包括Qt Creator、Qt Designer等等快速开发工具,还支持2D/3D图形渲染、OpenGL,允许真正的组件编程,是与GTK、MFC、OWL、ATL一样的图形界面库。使用Qt开发的软件可以做到一次开发、任意部署,相同的代码可以在任意…

Apple App Store API 快速获取app综合评分,最新评论

iDataRiver平台 https://idatariver.com 提供开箱即用的app store采集api,可快速获取app的公开信息,包括app综合评分,用户评论,版本记录,以及搜索app等,能快速获取市场的反馈从而提升运营效率。iDataRiver平台 https://www.idatariver.com/zh-cn/ 提供开箱即用的苹果应用…

6、JVM-JVM调优工具与实战

前置启动程序 事先启动一个web应用程序&#xff0c;用jps查看其进程id&#xff0c;接着用各种jdk自带命令优化应用 Jmap 此命令可以用来查看内存信息&#xff0c;实例个数以及占用内存大小 jmap -histo 14660 #查看历史生成的实例 jmap -histo:live 14660 #查看当前存活的实…

Stable Diffusion 3 API 发布!超越Midjourney v6和DALL-E 3

Stable Diffusion 3 于 2 月首次宣布作为预览版发布。而今天&#xff0c;StabilityAI 正式推出了 Stable Diffusion 3 和 Stable Diffusion 3 Turbo API 的API接口服务。 Stability AI 称仍在持续改进该模型&#xff0c;并没有说明发布日期。模型还没发布&#xff0c;但API先来…

说说你对图的理解?相关操作有哪些?

一、是什么 在计算机科学中,图是一种抽象的数据类型,在图中的数据元素通常称为结点,V是所有顶点的集合,E是所有边的集合 如果两个顶点v,w,只能由v向w,而不能由w向v,那么我们就把这种情况叫做一个从 v 到 w 的有向边。v也被称做初始点,w也被称为终点。这种图就被称做有向…

【机器学习】第二节-如何选择和评估模型

目录一、经验误差与过拟合错误率精度误差训练误差/经验误差度量指标泛化误差欠拟合过拟合二、评估方法专家样本1.留出法(1)单次留出法(2)多次留出法2.交叉验证(1)k折交叉验证(2)留一法(3)P次k折交叉验证3.自助法三、性能度量四、偏差与方差 一、经验误差与过拟合 错误率 分类错…

找win的局域网ip方式

执行命令ipconfig,结果如下这样跟你同一网络的小伙伴就能找到你啦

linux input system 分析笔记

1 struct input_dev 和 struct input_handler 1.1 简介 struct input_dev表示一个设备驱动层的输入设备。 struct input_handler是处理struct input_dev上报的事件的事件处理器。 1.2 全局变量input_dev_list&#xff0c;input_handler_list 输入设备链表&#xff1a;input…

C语言中的控制语句(分支语句 if、switch、三目运算符)

程序执行的三大流程 顺序 : 从上向下&#xff0c; 顺序执行代码分支 : 根据条件判断&#xff0c; 决定执行代码的分支循环 : 让特定代码重复的执行 分支语句 条件语句用来根据不同的条件来执行不同的语句&#xff0c;C语言中常用的条件语句包括if语句和switch语句。 if 语句…

Ubuntu下部署gitlab

1.安装gitlab服务 1.安装依赖 在ubuntu下使用快捷键ctrl+alt+T打开命令行窗口,然后运行下面命令 sudo apt update sudo apt-get upgrade sudo apt-get install curl openssh-server ca-certificates postfixps:如果这一步有遇到弹出框的直接Tab切换到确定/ok按钮,然后回车即可…

组态控制方法

什么叫组态控制?从应用场景上来看,如果现在集成了一个系统,它既包括了生产A要用的全部I/O系统,又包括可生产B和C等等要用的全部I/O系统。但是ABC的生产I/O不一样(硬件组态不尽相同)。 这个时候我就想用一套程序(包括硬件组态)就能适配全部的ABC生产。另外我在切换硬件组…