蓝桥杯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 数组的有效长度索引。
相关推荐
橙淮9 小时前
并发编程(六)
java·jvm
拽着尾巴的鱼儿9 小时前
springboot openfeign 自定义feign 接口重试机制
java·spring boot·后端
白露与泡影9 小时前
2026大厂Java面试题大全!牛客网最新版
java·开发语言
凯瑟琳.奥古斯特9 小时前
高阶子查询题目精炼
开发语言·数据库·python·职场和发展·数据库开发
EntyIU10 小时前
JVM内存与GC笔记
java·jvm·笔记
XS03010610 小时前
并发编程 六
java·后端
yaoxin52112310 小时前
419. 现代 Java IO 最佳实践 - 写入文本文件
java·windows·python
雪宫街道10 小时前
synchronized 锁的范围:对象锁、类锁与代码块锁
java·jvm·后端·面试
x***r15110 小时前
linux安装 jdk-8u291-linux-x64.tar.gz 详细步骤(解压配置环境变量)
java
凯瑟琳.奥古斯特11 小时前
数据库原理选择题精选
数据库·python·职场和发展