🔥题目一
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
如果一个正整数只有 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,延伸后判断湿地位置,即为二层循环,判断完湿地,它的上下左右都会变为新的湿地,时间截止,计算所有湿地。