七十七、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,延伸后判断湿地位置,即为二层循环,判断完湿地,它的上下左右都会变为新的湿地,时间截止,计算所有湿地。


相关文章
|
1月前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
69 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
3月前
|
负载均衡 NoSQL 算法
一天五道Java面试题----第十天(简述Redis事务实现--------->负载均衡算法、类型)
这篇文章是关于Java面试中Redis相关问题的笔记,包括Redis事务实现、集群方案、主从复制原理、CAP和BASE理论以及负载均衡算法和类型。
一天五道Java面试题----第十天(简述Redis事务实现--------->负载均衡算法、类型)
|
3月前
|
搜索推荐 算法 Java
手写快排:教你用Java写出高效排序算法!
快速排序(QuickSort)是经典的排序算法之一,基于分治思想,平均时间复杂度为O(n log n),广泛应用于各种场合。在这篇文章中,我们将手写一个Java版本的快速排序,从基础实现到优化策略,并逐步解析代码背后的逻辑。
144 1
|
1月前
|
算法 搜索推荐 Java
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
这篇文章介绍了如何使用Java后端技术,结合Graphics2D和Echarts等工具,生成包含个性化信息和图表的海报,并提供了详细的代码实现和GitHub项目链接。
104 0
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
|
1月前
|
算法 Java 数据中心
探讨面试常见问题雪花算法、时钟回拨问题,java中优雅的实现方式
【10月更文挑战第2天】在大数据量系统中,分布式ID生成是一个关键问题。为了保证在分布式环境下生成的ID唯一、有序且高效,业界提出了多种解决方案,其中雪花算法(Snowflake Algorithm)是一种广泛应用的分布式ID生成算法。本文将详细介绍雪花算法的原理、实现及其处理时钟回拨问题的方法,并提供Java代码示例。
67 2
|
1月前
|
算法 Java Linux
java制作海报一:java使用Graphics2D 在图片上写字,文字换行算法详解
这篇文章介绍了如何在Java中使用Graphics2D在图片上绘制文字,并实现自动换行的功能。
93 0
|
1月前
|
算法 Java 测试技术
数据结构 —— Java自定义代码实现顺序表,包含测试用例以及ArrayList的使用以及相关算法题
文章详细介绍了如何用Java自定义实现一个顺序表类,包括插入、删除、获取数据元素、求数据个数等功能,并对顺序表进行了测试,最后还提及了Java中自带的顺序表实现类ArrayList。
19 0
|
3月前
|
设计模式 缓存 算法
揭秘策略模式:如何用Java设计模式轻松切换算法?
【8月更文挑战第30天】设计模式是解决软件开发中特定问题的可重用方案。其中,策略模式是一种常用的行为型模式,允许在运行时选择算法行为。它通过定义一系列可互换的算法来封装具体的实现,使算法的变化与客户端分离。例如,在电商系统中,可以通过定义 `DiscountStrategy` 接口和多种折扣策略类(如 `FidelityDiscount`、`BulkDiscount` 和 `NoDiscount`),在运行时动态切换不同的折扣逻辑。这样,`ShoppingCart` 类无需关心具体折扣计算细节,只需设置不同的策略即可实现灵活的价格计算,符合开闭原则并提高代码的可维护性和扩展性。
63 2
|
3月前
|
安全 算法 Java
java系列之~~网络通信安全 非对称加密算法的介绍说明
这篇文章介绍了非对称加密算法,包括其定义、加密解密过程、数字签名功能,以及与对称加密算法的比较,并解释了非对称加密在网络安全中的应用,特别是在公钥基础设施和信任网络中的重要性。
|
3月前
|
搜索推荐 算法 Java
经典排序算法之-----选择排序(Java实现)
这篇文章通过Java代码示例详细解释了选择排序算法的实现过程,包括算法的基本思想、核心代码、辅助函数以及测试结果,展示了如何通过选择排序对数组进行升序排列。
经典排序算法之-----选择排序(Java实现)