七十七、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。
输出一个整数代表答案。
样例说明
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
输出一个整数,表示答案。
输入输出样例
运行限制
- 最大运行时间: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,延伸后判断湿地位置,即为二层循环,判断完湿地,它的上下左右都会变为新的湿地,时间截止,计算所有湿地。
文章来源: tuomasi.blog.csdn.net,作者:托马斯-酷涛,版权归原作者所有,如需转载,请联系作者。
原文链接:tuomasi.blog.csdn.net/article/details/123356200
- 点赞
- 收藏
- 关注作者
评论(0)