JAVA|第十一届蓝桥杯校内赛/校内选拔赛(2020蓝桥杯校选3-java)部分解题思路

一、问题描述
在计算机存储中,15.125GB是多少MB?
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

计算机二进制1GB=1024MB;
答案:15488
二、问题描述
一个数被称为质数(或素数)是指除开1和它本身两个约数外,没有其他的约数。
在不超过10000的数中,一共有多少个质数?
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
答案:1229
//求范围内的质数数量 public class Main { public static void main(String[] args) { int count = 1; int j; for(int i = 2; i <= 10000; i++){ j = 2; while (i%j != 0){ j++; if(j==i){ count++; } } } System.out.println(count); } }

曾看过一个题目是求1-10000的质数有哪些?
//求范围内的具体质数 public class Main { public static void main(String[] args) { System.out.println("2"); int j; for(int i = 2; i <= 10000; i++){ j = 2; while (i%j != 0){ j++; if(j==i){ System.out.println(i); } } } } }


三、问题描述
一个包含有2019个结点的无向连通图,最少包含多少条边?
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
如下图所示为一个无向连通图:任何两个节点之前都是连通的,都存在一条路径,并且图中没有方向。
JAVA|第十一届蓝桥杯校内赛/校内选拔赛(2020蓝桥杯校选3-java)部分解题思路
文章图片

有n个顶点的无向连通图最多有n(n-1)/2条边(构成一个无向完全图的情况);
最少有n-1条边(n个顶点是连通的);
答案:2018
四、问题描述
一个包含有2019个结点的有向图,最多包含多少条边?(不允许有重边)
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
如下图所示为一个有向图:一幅有向图是由一组顶点和一组有方向的边组成的,每条有方向的边都连接着有序的一对顶点。
JAVA|第十一届蓝桥杯校内赛/校内选拔赛(2020蓝桥杯校选3-java)部分解题思路
文章图片

一个具有n个顶点的有向图最多有n(n-1)条边;
答案:4074342
五、问题描述
小明对类似于 hello 这种单词非常感兴趣,这种单词可以正好分为四段,第一段由一个或多个辅音字母组成,第二段由一个或多个元音字母组成,第三段由一个或多个辅音字母组成,第四段由一个或多个元音字母组成。
给定一个单词,请判断这个单词是否也是这种单词,如果是请输出yes,否则请输出no。
元音字母包括 a, e, i, o, u,共五个,其他均为辅音字母。
输入格式
输入一行,包含一个单词,单词中只包含小写英文字母。
输出格式
输出答案,或者为yes,或者为no。
样例输入
lanqiao
样例输出
yes
样例输入
world
样例输出
no
评测用例规模与约定
对于所有评测用例,单词中的字母个数不超过100。
import java.util.HashSet; import java.util.Scanner; import java.util.Set; public class Main { public static void main(String[] args) {Set fset = new HashSet<>(); Set yset = new HashSet<>(); for (char i = 'a'; i <= 'z'; i++) { if (i == 'a' || i == 'e' || i == 'i' || i == 'o' || i == 'u') { yset.add(i); } else { fset.add(i); } } Scanner sc = new Scanner(System.in); String str = sc.next(); int p = 0, aa = 0, bb = 0, cc = 0, dd = 0; while (p < str.length() && fset.contains(str.charAt(p))) { aa = 1; p++; } while (p < str.length()&& yset.contains(str.charAt(p))) { bb = 1; p++; } while (p < str.length()&& fset.contains(str.charAt(p))) { cc = 1; p++; } while (p < str.length() && yset.contains(str.charAt(p))) { dd = 1; p++; } if (p == str.length() && aa == 1 && bb == 1 && cc == 1 && dd == 1) { System.out.println("yes"); } else { System.out.println("no"); } } }

六、问题描述
给定一个单词,请使用凯撒密码将这个单词加密。
凯撒密码是一种替换加密的技术,单词中的所有字母都在字母表上向后偏移3位后被替换成密文。即a变为d,b变为e,...,w变为z,x变为a,y变为b,z变为c。
例如,lanqiao会变成odqtldr。
输入格式
输入一行,包含一个单词,单词中只包含小写英文字母。
输出格式
输出一行,表示加密后的密文。
样例输入
lanqiao
样例输出
odqtldr
评测用例规模与约定
对于所有评测用例,单词中的字母个数不超过100。
//小写或大写字母加密 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); String a = input.nextLine(); int key = 3; Encryption(a,key); input.close(); } public static void Encryption(String arr,int k) { String string =""; for(int i=0; i='a'&&c<='z') {//如果字符串中的某个字符是小写字母 c+=k%26; //移动key%26位 if(c<'a') c+=26; //向左超界 if(c>'z') c-=26; //向右超界 } else if(c>='A'&&c<='Z') //如果字符串中的某个字符是大写字母 { c+=k%26; //移动key%26位 if(c<'A') c+=26; //向左超界 if(c>'Z') c-=26; //向右超界 } string +=c; //将解密后的字符连成字符串 } System.out.println(string); } }

曾见过一个题目是解密的,如下:
//小写或大写字母解密 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); String a = input.nextLine(); int key = 3; Decrypt(a,key); input.close(); } public static void Decrypt(String str, int n) { // TODO Auto-generated method stub //解密 int k=Integer.parseInt("-"+n); String string=""; for(int i=0; i='a'&&c<='z')//如果字符串中的某个字符是小写字母 { c+=k%26; //移动key%26位 if(c<'a') c+=26; //向左超界 if(c>'z') c-=26; //向右超界 }else if(c>='A'&&c<='Z')//如果字符串中的某个字符是大写字母 { c+=k%26; //移动key%26位 if(c<'A') c+=26; //向左超界 if(c>'Z') c-=26; //向右超界 }string +=c; //将解密后的字符连成字符串 } System.out.println(string); } }

【JAVA|第十一届蓝桥杯校内赛/校内选拔赛(2020蓝桥杯校选3-java)部分解题思路】七、问题描述
给定正整数 n,请问在整数 1 至 n 中,数字中没有数位相同的数有多少个?
例如,当 n=30 时,除开 11 和 22 以外,其他的数都没有数位相同,因此答案为 28。
输入格式
输入的第一行包含一个整数 n。
输出格式
输出一行包含一个整数,表示答案。
样例输入
30
样例输出
28
评测用例规模与约定
对于 40% 的评测用例,1 <= n <= 1000。
对于 80% 的评测用例,1 <= n <= 100000。
对于所有评测用例,1 <= n <= 1000000。
import java.util.Scanner; public class Main { public static boolean check(int i){ int arr[]=new int[10]; while(i>0){ arr[i%10]++; i/=10; } for(int j=0; j<10; j++) if(arr[j]>1) return false; return true; } public static void main(String[] args) { int count=0; Scanner sc=new Scanner(System.in); int n=sc.nextInt(); for(int i=1; i<=n; i++) if(check(i)) count++; System.out.println(count); sc.close(); } }

八、问题描述
当夜深人静时,小明喜欢独自凝望着天空。
这一天,小明看着满天的繁星,突发奇思妙想,他发现可以通过用直线连接天空中的星星来组成美丽的图案。
小明想到一个非常简单的图案:大写的V,如果连接三颗星星,中间一颗最靠下方,这样的形状就是一个大V了。
小明越想越着迷,他想知道,天空中最亮的 n 颗星星,可以有多少种方式组成大V。
为了更严谨的看待问题,小明把自己所见范围的天空映射到了一个平面直角坐标系中,他看到的最亮的 n 颗星星在这个坐标系中都有自己的坐标。
如果三颗星星的坐标分别为 (x_i, y_i), (x_j, y_j), (x_k, y_k),当 x_i < x_j < x_k 且 y_j < y_i 且 y_j < y_k 时,这三颗星星就组成了一个大 V。
输入格式
输入的第一行包含一个整数 n 。
接下来 n 行,每行两个整数,每一行表示一颗星星的 x 坐标和 y 坐标。
输出格式
输出一行包含一个整数,表示有多少种方式组成大V。
样例输入
5
4 5
2 3
1 4
3 3
5 8
样例输出
4
评测用例规模与约定
对于 30% 的评测用例,2 <= n <= 50,星星的坐标为不超过 1000 的非负整数。
对于 50% 的评测用例,2 <= n <= 100,星星的坐标为不超过 1000 的非负整数。
对于 80% 的评测用例,2 <= n <= 1000,星星的坐标为不超过 10000 的非负整数。
对于所有评测用例,2 <= n <= 5000,星星的坐标为不超过 100000 的非负整数。
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner Input = new Scanner(System.in); int n = Input.nextInt(); int abc[][] = new int[n][2]; int sum =0; for(int i=0; i
九、问题描述
小明开了一家花店,这天,有个客户定了非常多的花,按客户的需要,这些花要排成 n 行 m 列。
小明要将这些花运送到客户那,然而由于花太多,需要分两辆车才能装下。
小明怕自己弄错花的顺序,因此在分车的时候,他准备将前面一些列(注意不是行)的花放在第一辆车上,将其实的花放在第二辆车上。
已知每盆花的重量,要使第一辆车和第二辆车尽可能总重量一致,请帮助小明分装这些花,请告诉小明两辆车的重量最小差多少。
输入格式
输入的第一行包含两个整数 n, m,分别表示行数和列数。
接下来 n 行,每行 m 个正整数,分别表示每盆花的重量。
输出格式
输出一个整数,表示总重量最接近时两车的重量之差(的绝对值)。
样例输入
3 4
1 2 3 9
5 6 7 8
2 3 4 9
样例输出
7
样例说明
将前 3 列放一辆车,后 1 列放一辆车,第一辆比第二辆重 7 。
评测用例规模与约定
对于 30% 的评测用例,2 <= n, m <= 20。
对于 70% 的评测用例,2 <= n, m <= 100。
对于所有评测用例,2 <= n, m <= 1000,每盆花的重量不超过 1000。
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in); long mi=200000000L; int cur=0; int sum=0; int n=sc.nextInt(),m=sc.nextInt(); int arr[][]=new int[n][m]; int ans[]=new int[m]; for(int i=0; i
十、问题描述
2015年,全中国实现了户户通电。作为一名电力建设者,小明正在帮助一带一路上的国家通电。
这一次,小明要帮助 n 个村庄通电,其中 1 号村庄正好可以建立一个发电站,所发的电足够所有村庄使用。
现在,这 n 个村庄之间都没有电线相连,小明主要要做的是架设电线连接这些村庄,使得所有村庄都直接或间接的与发电站相通。
小明测量了所有村庄的位置(坐标)和高度,如果要连接两个村庄,小明需要花费两个村庄之间的坐标距离加上高度差的平方,形式化描述为坐标为 (x_1, y_1) 高度为 h_1 的村庄与坐标为 (x_2, y_2) 高度为 h_2 的村庄之间连接的费用为
sqrt((x_1-x_2)*(x_1-x_2)+(y_1-y_2)*(y_1-y_2))+(h_1-h_2)*(h_1-h_2)。
在上式中 sqrt 表示取括号内的平方根。请注意括号的位置,高度的计算方式与横纵坐标的计算方式不同。
由于经费有限,请帮助小明计算他至少要花费多少费用才能使这 n 个村庄都通电。
输入格式
输入的第一行包含一个整数 n ,表示村庄的数量。
接下来 n 行,每个三个整数 x, y, h,分别表示一个村庄的横、纵坐标和高度,其中第一个村庄可以建立发电站。
输出格式
输出一行,包含一个实数,四舍五入保留 2 位小数,表示答案。
样例输入
4
1 1 3
9 9 7
8 8 6
4 5 4
样例输出
17.41
评测用例规模与约定
对于 30% 的评测用例,1 <= n <= 10;
对于 60% 的评测用例,1 <= n <= 100;
对于所有评测用例,1 <= n <= 1000,0 <= x, y, h <= 10000。
(新手上路,大神勿喷,请多多指教)

    推荐阅读