蓝桥杯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 循环 :
    • 单层循环:用于读取数组元素、判断质数、检查重复性。
    • 嵌套循环 (双重循环) :核心逻辑部分,遍历 arr1 和 arr2 的所有组合 ( 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 数组的有效长度索引。
相关推荐
萧瑟余晖39 分钟前
Spring Batch核心模型与快速上手详解
java·spring·batch
缓慢更新1 小时前
AI 辅助生成单测:从接口定义到用例的流水线
java·服务器·前端·网络·数据库·人工智能
LMT流氓兔3 小时前
第五单元——第十六课:给书店助手加上网页界面
java·开发语言·jvm·人工智能·oracle·langchain·1024程序员节
wangbing11254 小时前
平台介绍-modbus设备调试
java
西索斯coding4 小时前
gpt-image-2.5-sunburst 和 gemini-3.1-flash-image 差多少?60 组项目素材的成功成本评测框架
java·linux·gpt·ai
wuminyu5 小时前
Java字节码学习总结:字节码如何加载、解析和执行
java·linux·c语言·jvm·c++
Flynn Liang5 小时前
大模型怎么自己调函数?Spring AI 2.0 Tool Calling 自动循环原理 + 完整时序图
java·人工智能·spring·agent·函数调用·springai·toolcalling
乌暮6 小时前
请求进门先安检:Spring 拦截器与统一功能实战指南
java·开发语言·后端·学习·spring
学长毕设6 小时前
基于SpringBoot的烘焙商品商品系统-附源码
java·spring boot·后端
金銀銅鐵7 小时前
[Java] 用纯 Swing 做一个《論語·學而》阅读器
java·ai编程·交互设计