蓝桥杯JAVA-4

一、题目

二、解题思路

首先读取两个数组的长度并输入数组元素,接着通过双层循环遍历两个数组中的所有元素组合,计算每一组元素的和,先判断该和是否不超过数组长度之和,再对符合条件的和进行质数判断,若为质数则检查是否已记录过,未重复的质数就存入数组并计数,最终输出不重复的质数总个数。

三、代码

java 复制代码
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        //在此输入您的代码...
        int num1=scan.nextInt();
        int num2=scan.nextInt();
        int sum=num1+num2;
        int count=0;
        int temp=0;
        boolean is=true;
        boolean cz=false;
        int arr1[]=new int[num1];
        int arr2[]=new int[num2];
        int temp2[]=new int[sum];
        for(int i=0;i<num1;i++){
          arr1[i]=scan.nextInt();
        }
        for(int j=0;j<num2;j++){
          arr2[j]=scan.nextInt();
        }

        for(int k=0;k<num1;k++){
          for(int p=0;p<num2;p++){
            temp=arr1[k]+arr2[p];
            if(temp<=sum){
              // 判断两数之和是否为质数
              for(int z=2;z<=temp/2;z++){
                if(temp%z==0){
                  is=false;
                  break;
                }
              }
              //两数之和为质数
              if(is==true){
                //判断两数之和是否重复
                for(int o=0;o<count;o++){
                  if(temp2[o]==temp){
                    cz=true;
                    break;
                  }
                }
                //两束之和不重复
                if(cz==false){
                  temp2[count]=temp;
                  count++;
                }
              }
            is=true;
            cz=false;
          }else{
            continue;
          }
        }
        }
        System.out.println(count);
        scan.close();
    }
}

四、知识点总结

1、质数

(也叫素数 )是大于 1 的自然数 ,并且除了 1 和它本身以外,不能被其他自然数整除

简单说:

  • 一个数如果只能被 1它自己 整除,没有别的因数,它就是质数。
  • 反之,如果除了 1 和自己还有别的因数,就叫合数

2、输入输出 (I/O)

  • java.util.Scanner 类的使用 :用于从标准输入流(键盘)读取数据。
    • nextInt():读取整数。
    • close():关闭扫描器,释放资源(良好的编程习惯)。
  • 标准输出 :使用 System.out.println() 将结果打印到控制台。

3、变量与数据类型

  • 基本数据类型 :使用了 int (整型) 和 boolean (布尔型)。
  • 变量声明与初始化 :定义了计数器 (count)、临时变量 (temp)、标志位 (is, cz) 等。

4、 数组 (Array)

  • 数组的声明与创建new int[size] 动态创建指定长度的整型数组。
    • arr1, arr2:存储输入的两组数据。
    • temp2:作为"集合"使用,用于存储不重复的质数和(这里用数组模拟了集合的去重功能)。
  • 数组的遍历与赋值 :通过下标访问数组元素 (arr[i] = ...)。

5、流程控制结构

  • for 循环
    • 单层循环:用于读取数组元素、判断质数、检查重复性。
    • 嵌套循环 (双重循环) :核心逻辑部分,遍历 arr1arr2 的所有组合 ( O(N×M)O(N×M) 复杂度),计算两数之和。
  • if-else 条件判断
    • 判断和是否小于等于总和 (temp <= sum)。
    • 判断是否为质数。
    • 判断结果是否已存在(去重逻辑)。
  • break 语句
    • 在发现因子时立即跳出内层循环(优化质数判断)。
    • 在发现重复值时立即跳出检查循环。
  • continue 语句:当和超过限制时,跳过本次循环剩余部分。

6、基础算法逻辑

  • 质数判断算法 (Primality Test)
    • 逻辑:尝试用 22 到 temp/2temp/2 之间的所有整数去除 temp
    • 标志位法:使用 boolean is 标记是否为质数,初始化为 true,一旦发现能整除则设为 false
    • 注:这是一个基础的试除法,虽然效率不是最高(通常只需遍历到 temptemp​ ),但在初学者题目中很常见。
  • 数组去重 (Deduplication)
    • 在没有使用 HashSet 等集合类的情况下,手动实现去重。
    • 逻辑:每产生一个新结果,遍历已存储结果的数组 (temp2),如果不存在则加入,存在则忽略。
  • 计数逻辑 :使用 count 变量既作为最终结果的输出,也作为 temp2 数组的有效长度索引。
相关推荐
XiYang-DING2 小时前
【LeetCode】LCR 019. 验证回文串 II
算法·leetcode·职场和发展
顶点多余2 小时前
深度剖析Linux 线程概念
java·linux·jvm
_MyFavorite_2 小时前
JAVA重点基础、进阶知识及易错点总结(8)List 接口(ArrayList、LinkedList、Vector)
java·开发语言·list
第二层皮-合肥2 小时前
基于C#的工业测控软件-依赖库
java·开发语言
openallzzz2 小时前
【面经分享】Java实习
java·开发语言
indexsunny2 小时前
互联网大厂Java面试:从Spring Boot到微服务的逐步挑战
java·数据库·spring boot·redis·微服务·面试·电商
27669582922 小时前
租车帮(悟空)订单查询算法分析
java·服务器·前端·悟空·悟空app·租车帮·租车帮逆向
鬼蛟2 小时前
Spring Boot
java·开发语言
北苇渡江3 小时前
failed to get nested archive for entry Boot-inf/lib/xxx.jar
java·jar