七十七、Java算法练习打卡(三题)

简介: 七十七、Java算法练习打卡(三题)

🔥题目一


题目描述


本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。


如果一个正整数只有 11 和它本身两个约数,则称为一个质数(又称素数)。


前几个质数是:2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, · · 。


如果一个质数的所有十进制数位都是质数,我们称它为纯质数。例如:2,3, 5, 7, 23, 37都是纯质数,而 11, 13, 17, 19, 29, 31不是纯质数。当然 1, 4, 35也不是纯质数。


请问,在 11 到 20210605中,有多少个纯质数?


运行限制


最大运行时间:1s

最大运行内存: 256M


题解

import java.util.Scanner;
public class Main {
  public static void main(String[] args) {
        int count = 0;
        for ( int i = 1 ; i <= 20210605 ; i++ ){
            if ( isprinum(i) ){
                if ( fun(i) ){
                    count++;
                }
            }
        }
        System.out.println(count);
    }
    //判断质数
    public static boolean isprinum(int num){
        //注意0不是素数
        if ( num == 1 || num == 0 ){
            return false;
        }
        for ( int i = 2 ; i <= Math.sqrt(num) ; i++ ){
            if( num % i == 0){
                return false;
            }
        }
        return true;
    }
    //判断十进制位数是不是质数
    public static boolean fun(int peinum){
        while(peinum > 0){
            int n = peinum % 10;
            if ( !isprinum(n) ){
                return false;
            }
            peinum = peinum / 10;
        }
        return true;
    }
}

       注:Math.sqrt方法为求此数的正平方根


🔥题目二


题目描述


你有一架天平。现在你要设计一套砝码,使得利用这些砝码可以称出任意小于等于 N 的正整数重量。


那么这套砝码最少需要包含多少个砝码?


注意砝码可以放在天平两边。


输入\出格式


输入包含一个正整数 N。


输出一个整数代表答案。


12.png


样例说明


3 个砝码重量是 1、4、6 可以称出 1至 7的所有重量。


1 = 1;


2 = 6 − 4(天平一边放 6,另一边放 4);


3 = 4 − 1;


4 = 4;


5 = 6 − 1;


6 = 6;


7 = 1 + 6;


少于 3 个砝码不可能称出 1 至 7 的所有重量。


评测用例规模与约定


对于所有评测用例,1 ≤ N ≤ 1000000000。


运行限制


最大运行时间:1s

最大运行内存: 512M


题解

import java.util.Scanner;
public class Main {
  public static void main(String[] args) {
  Scanner sc = new Scanner(System.in);
  int n = sc.nextInt();
  sc.close();
  int weight = 1;
  int count = 1;
  int total = 1;
  while (total < n) {
    count++;
    weight *= 3;
    total += weight;
  }
  System.out.println(count);
  }
}

砝码序号

砝码重量

总重量(可以称出的最大重量)

1

1

1

2

3

4

3

9

13

4

27

40

......

......

......

count=count+1

weight=weight*3


total=total+weight

当count=1时,砝码只有一个,重量为1,3^count-1=1


当count=2时,砝码组合为1、3,是首项为1,公比为3的等比数列


设count=k(k>=2)时,砝码组合是一个首项为1公比为3等比数列,末项为3^count-1,total=(3^count-1)/2


🔥题目三


题目描述


小蓝负责花园的灌溉工作。


花园可以看成一个 n 行 m 列的方格图形。中间有一部分位置上安装有出水管。


小蓝可以控制一个按钮同时打开所有的出水管,打开时,有出水管的位置可以被认为已经灌溉好。


每经过一分钟,水就会向四面扩展一个方格,被扩展到的方格可以被认为已经灌溉好。即如果前一分钟某一个方格被灌溉好,则下一分钟它上下左右的四个方格也被灌溉好。


给定花园水管的位置,请问 k 分钟后,有多少个方格被灌溉好?


输入\出描述


输入的第一行包含两个整数 n, m。


第二行包含一个整数 t,表示出水管的数量。


接下来 t 行描述出水管的位置,其中第 i 行包含两个数 r, c表示第 r 行第 c 列有一个排水管。


接下来一行包含一个整数 k。


其中,1<=n,m<=100,1<=t<=10,1<=k<=100


输出一个整数,表示答案。


输入输出样例

13.png


运行限制


最大运行时间:1s

最大运行内存: 128M


题解

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();//行数
        int m=sc.nextInt();//列数
        int t=sc.nextInt();//出水口数
        int a,b;
        int [][]arr=new int[n+2][m+2];//经过时间后的湿地信息
        int [][]brr=new int[n+1][m+1];//当前时间湿地信息
        for (int i=0;i<t;i++){
            a=sc.nextInt();
            b=sc.nextInt();
            arr[a][b]=1;
            brr[a][b]=1;
        }
        int count=0;
        int k=sc.nextInt();//时间
        for (int i=1;i<=k;i++){//时间循环
            for (int j=1;j<=n;j++){//寻找当前湿地
                for (int s=1;s<=m;s++){//寻找当前湿地
                    if (brr[j][s]==1){//当前为湿地
                        arr[j-1][s]=1;//经过该时间后,此地为湿地
                        arr[j+1][s]=1;//经过该时间后,此地为湿地
                        arr[j][s-1]=1;//经过该时间后,此地为湿地
                        arr[j][s+1]=1;//经过该时间后,此地为湿地
                    }
                }
            }
            for (int j=1;j<=n;j++){//更改当前湿地信息(即经过该时间后为湿地)
                for (int s=1;s<=m;s++){
                    if (arr[j][s]==1){
                        brr[j][s]=1;
                        if (i==k){//到达最后的时间
                            count++;//统计数量
                        }
                    }
                }
            }
        }
        System.out.println(count);
    }
}


出水管为湿地,湿地每分钟延伸,时间为k,总共延伸k次,外层循环为1-k,延伸后判断湿地位置,即为二层循环,判断完湿地,它的上下左右都会变为新的湿地,时间截止,计算所有湿地。


相关文章
|
4月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
4月前
|
存储 缓存 监控
上网行为监控系统剖析:基于 Java LinkedHashMap 算法的时间序列追踪机制探究
数字化办公蓬勃发展的背景下,上网行为监控系统已成为企业维护信息安全、提升工作效能的关键手段。该系统需实时记录并深入分析员工的网络访问行为,如何高效存储和管理这些处于动态变化中的数据,便成为亟待解决的核心问题。Java 语言中的LinkedHashMap数据结构,凭借其独有的有序性特征以及可灵活配置的淘汰策略,为上网行为监控系统提供了一种兼顾性能与功能需求的数据管理方案。本文将对LinkedHashMap在上网行为监控系统中的应用原理、实现路径及其应用价值展开深入探究。
101 3
|
4月前
|
人工智能 算法 NoSQL
LRU算法的Java实现
LRU(Least Recently Used)算法用于淘汰最近最少使用的数据,常应用于内存管理策略中。在Redis中,通过`maxmemory-policy`配置实现不同淘汰策略,如`allkeys-lru`和`volatile-lru`等,采用采样方式近似LRU以优化性能。Java中可通过`LinkedHashMap`轻松实现LRUCache,利用其`accessOrder`特性和`removeEldestEntry`方法完成缓存淘汰逻辑,代码简洁高效。
182 0
|
3月前
|
存储 算法 安全
Java中的对称加密算法的原理与实现
本文详细解析了Java中三种常用对称加密算法(AES、DES、3DES)的实现原理及应用。对称加密使用相同密钥进行加解密,适合数据安全传输与存储。AES作为现代标准,支持128/192/256位密钥,安全性高;DES采用56位密钥,现已不够安全;3DES通过三重加密增强安全性,但性能较低。文章提供了各算法的具体Java代码示例,便于快速上手实现加密解密操作,帮助用户根据需求选择合适的加密方案保护数据安全。
332 58
|
2月前
|
存储 负载均衡 算法
我们来说一说 Java 的一致性 Hash 算法
我是小假 期待与你的下一次相遇 ~
|
9月前
|
监控 算法 网络协议
Java 实现局域网电脑屏幕监控算法揭秘
在数字化办公环境中,局域网电脑屏幕监控至关重要。本文介绍用Java实现这一功能的算法,涵盖图像采集、数据传输和监控端显示三个关键环节。通过Java的AWT/Swing库和Robot类抓取屏幕图像,使用Socket进行TCP/IP通信传输图像数据,并利用ImageIO类在监控端展示图像。整个过程确保高效、实时和准确,为提升数字化管理提供了技术基础。
189 15
|
8月前
|
存储 算法 安全
探究‘公司禁用 U 盘’背后的哈希表算法与 Java 实现
在数字化办公时代,信息安全至关重要。许多公司采取“禁用U盘”策略,利用哈希表算法高效管理外接设备的接入权限。哈希表通过哈希函数将设备标识映射到数组索引,快速判断U盘是否授权。例如,公司预先将允许的U盘标识存入哈希表,新设备接入时迅速验证,未授权则禁止传输并报警。这有效防止恶意软件和数据泄露,保障企业信息安全。 代码示例展示了如何用Java实现简单的哈希表,模拟公司U盘管控场景。哈希表不仅用于设备管理,还在文件索引、用户权限等多方面助力信息安全防线的构建,为企业数字化进程保驾护航。
|
2月前
|
存储 监控 算法
企业上网监控场景下布隆过滤器的 Java 算法构建及其性能优化研究
布隆过滤器是一种高效的数据结构,广泛应用于企业上网监控系统中,用于快速判断员工访问的网址是否为违规站点。相比传统哈希表,它具有更低的内存占用和更快的查询速度,支持实时拦截、动态更新和资源压缩,有效提升系统性能并降低成本。
58 0
|
5月前
|
存储 机器学习/深度学习 监控
如何监控员工的电脑——基于滑动时间窗口的Java事件聚合算法实现探析​
在企业管理场景中,如何监控员工的电脑操作行为是一个涉及效率与合规性的重要课题。传统方法依赖日志采集或屏幕截图,但数据量庞大且实时性不足。本文提出一种基于滑动时间窗口的事件聚合算法,通过Java语言实现高效、低资源占用的监控逻辑,为如何监控员工的电脑提供一种轻量化解决方案。
124 3
|
7月前
|
存储 算法 Java
解锁“分享文件”高效密码:探秘 Java 二叉搜索树算法
在信息爆炸的时代,文件分享至关重要。二叉搜索树(BST)以其高效的查找性能,为文件分享优化提供了新路径。本文聚焦Java环境下BST的应用,介绍其基础结构、实现示例及进阶优化。BST通过有序节点快速定位文件,结合自平衡树、多线程和权限管理,大幅提升文件分享效率与安全性。代码示例展示了文件插入与查找的基本操作,适用于大规模并发场景,确保分享过程流畅高效。掌握BST算法,助力文件分享创新发展。

热门文章

最新文章