Java蓝桥杯刷题记录(一)
1.单词分析
题目描述
小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组 成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字母出现得最多来分辨单词。
现在,请你帮助小蓝,给了一个单词后,帮助他找到出现最多的字母和这 个字母出现的次数。
输入描述
输入一行包含一个单词,单词只由小写英文字母组成。
对于所有的评测用例,输入的单词长度不超过 1000。
输出描述
输出两行,第一行包含一个英文字母,表示单词中出现得最多的字母是哪 个。如果有多个字母出现的次数相等,输出字典序最小的那个。
第二行包含一个整数,表示出现得最多的那个字母在单词中出现的次数。
输入输出样例
示例 1
输入
lanqiao
输出
a
2
示例 2
输入
longlonglongistoolong
输出
o
6
运行限制
- 最大运行时间:1s
- 最大运行内存: 256M
代码

import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改 public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); //在此输入您的代码... String str = scan.nextLine(); int[] a = new int [26]; for(int i=0; i < str.length(); i++){ a[str.charAt(i) - 'a'] ++; } char ch = 'a'; int max = 0; for(int i=0; i<26;i++){ if(a[i] > max){ max = a[i]; ch = (char)('a'+i); } } System.out.println(ch); System.out.println(max); scan.close(); } }
2.成绩统计
题目描述
小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数。
如果得分至少是 60 分,则称为及格。如果得分至少为 85 分,则称为优秀。
请计算及格率和优秀率,用百分数表示,百分号前的部分四舍五入保留整 数。
输入描述
输入的第一行包含一个整数 n\ (1 \leq n \leq 10^4)n (1≤n≤104),表示考试人数。
接下来 nn 行,每行包含一个 0 至 100 的整数,表示一个学生的得分。
输出描述
输出两行,每行一个百分数,分别表示及格率和优秀率。百分号前的部分 四舍五入保留整数。
输入输出样例
示例
输入
7
80
92
56
74
88
100
0
输出
71%
43%
运行限制
- 最大运行时间:1s
- 最大运行内存: 256M
代码

import java.util.Scanner; import java.lang.*; // 1:无需package // 2: 类名必须Main, 不可修改 public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); //在此输入您的代码... int num = scan.nextInt(); double yx = 0; double jg = 0; for(int i = 0; i < num; i++){ int a = scan.nextInt(); if(a >= 60){ if(a >= 85){ yx++; } jg++; } } System.out.println(Math.round(jg*100/num) + "%"); System.out.println(Math.round(yx*100/num) + "%"); scan.close(); } }
3.卡片
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小蓝有很多数字卡片,每张卡片上都是数字 00 到 99。 小蓝准备用这些卡片来拼一些数,他想从 11 开始拼出正整数,每拼一个, 就保存起来,卡片就不能用来拼其它数了。 小蓝想知道自己能从 11 拼到多少。 例如,当小蓝有 3030 张卡片,其中 00 到 99 各 33 张,则小蓝可以拼出 11 到 1010, 但是拼 1111 时卡片 11 已经只有一张了,不够拼出 1111。 现在小蓝手里有 00 到 99 的卡片各 20212021 张,共 2021020210 张,请问小蓝可以从 11 拼到多少? 提示:建议使用计算机编程解决问题
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
代码

import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改 public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); //在此输入您的代码... int count = 0; for(int i=1; i<20210; i++){ String str = i + ""; for(int j=0; j<str.length(); j++){ if(str.charAt(j) == '1') count ++; } if(count == 2021){ System.out.println(str); break; } } scan.close(); } }
4.空间
题目描述
小蓝准备用 256MB256MB 的内存空间开一个数组,数组的每个元素都是 3232 位 二进制整数,如果不考虑程序占用的空间和维护内存需要的辅助空间,请问 256MB256MB 的空间可以存储多少个 3232 位二进制整数?
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
代码

import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改 public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); //在此输入您的代码... int a = 256*8*1024*1024/32; System.out.println(Math.abs(a)); scan.close(); } }
5.走网格
题目描述
小蓝在一个 nn 行 mm 列的方格图中玩一个游戏。
开始时,小蓝站在方格图的左上角,即第 11 行第 11 列。
小蓝可以在方格图上走动,走动时,如果当前在第 rr 行第 cc 列,他不能走到行号比 rr 小的行,也不能走到列号比 cc 小的列。同时,他一步走的直线距离不超过 33。
例如,如果当前小蓝在第 33 行第 55 列,他下一步可以走到第 33 行第 66 列、第 33 行第 77 列、第 33 行第 88 列、第 44 行第 55 列、第 44 行第 66 列、第 44 行第 77 列、第 55 行第 55 列、第 55 行第 66 列、第 66 行第 55 列之一。
小蓝最终要走到第 nn 行第 mm 列。
在图中,有的位置有奖励,走上去即可获得,有的位置有惩罚,走上去就要接受惩罚。奖励和惩罚最终抽象成一个权值,奖励为正,惩罚为负。
小蓝希望,从第 11 行第 11 列走到第 nn 行第 mm 列后,总的权值和最大。请问最大是多少?
输入描述
输入的第一行包含两个整数 n, mn,m,表示图的大小。
接下来 nn 行,每行 mm 个整数,表示方格图中每个点的权值。
其中,1 \leq n \leq 100,-10^4 \leq 权值 \leq 10^41≤n≤100,−104≤权值≤104。
输出描述
输出一个整数,表示最大权值和。
输入输出样例
示例 1
输入
3 5
-4 -5 -10 -3 1
7 5 -9 3 -10
10 -2 6 -10 -4
输出
15
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
代码

import java.util.Scanner; public class Main { static Scanner sr = new Scanner(System.in); static int n = sr.nextInt(); static int m = sr.nextInt(); static int[][] map = new int[n][m]; static int dx[] = {0,0,0,1,2,3,1,2,1}; static int dy[] = {1,2,3,0,0,0,1,1,2}; static int max_length = Integer.MIN_VALUE; public static void main(String[] args) { for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { map[i][j] = sr.nextInt(); } } dfs(0,0, map[0][0]); System.out.println(max_length); } private static void dfs(int i, int j, int length) { // TODO Auto-generated method stub if(i==n-1 && j== m-1) max_length = Math.max(length, max_length);//更新最长长度 for (int k = 0; k < dx.length; k++) { int nx = i + dx[k]; int ny = j + dy[k]; //根据范围内坐标进行递归 if (nx >= 0 && ny >= 0 && nx < n && ny < m ) { //进行递归 dfs(nx,ny,length+map[nx][ny]); } } } }
6.货物摆放
题目描述
小蓝有一个超大的仓库,可以摆放很多货物。
现在,小蓝有 nn 箱货物要摆放在仓库,每箱货物都是规则的正方体。小蓝规定了长、宽、高三个互相垂直的方向,每箱货物的边都必须严格平行于长、宽、高。
小蓝希望所有的货物最终摆成一个大的长方体。即在长、宽、高的方向上分别堆 LL、WW、HH 的货物,满足 n = L \times W \times Hn=L×W×H。
给定 nn,请问有多少种堆放货物的方案满足要求。
例如,当 n = 4n=4 时,有以下 66 种方案:1×1×4、1×2×2、1×4×1、2×1×2、2 × 2 × 1、4 × 1 × 11×1×4、1×2×2、1×4×1、2×1×2、2×2×1、4×1×1。
请问,当 n = 2021041820210418n=2021041820210418 (注意有 1616 位数字)时,总共有多少种方案?
提示:建议使用计算机编程解决问题。
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
代码

import java.util.Scanner; import java.util.ArrayList; import java.util.List; // 1:无需package // 2: 类名必须Main, 不可修改 public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); //在此输入您的代码... Long num = new Long("2021041820210418"); int counts = 0; List<Long> yinzi = new ArrayList<>(); for(long i = 1; i * i <= num;i++){ if(num % i == 0){ yinzi.add(i); if(num / i != i){ yinzi.add(num/i); } } } int res = 0; for(long i:yinzi){ for(long j:yinzi){ for(long t:yinzi){ if(i * j * t == num){ res++; } } } } System.out.println(res); scan.close(); } }
7.时间显示
题目描述
小蓝要和朋友合作开发一个时间显示的网站。
在服务器上,朋友已经获取了当前的时间,用一个整数表示,值为从 19701970 年 11 月 11 日 00:00:0000:00:00 到当前时刻经过的毫秒数。
现在,小蓝要在客户端显示出这个时间。小蓝不用显示出年月日,只需要显示出时分秒即可,毫秒也不用显示,直接舍去即可。
给定一个用整数表示的时间,请将这个时间对应的时分秒输出。
输入描述
输入一行包含一个整数,表示时间。
输出描述
输出时分秒表示的当前时间,格式形如 HH:MM:SS
,其中 HH
表示时,值为 00 到 2323,MM
表示分,值为 00 到 5959,SS
表示秒,值为 00 到 5959。时、分、秒 不足两位时补前导 00。
输入输出样例
示例 1
输入
46800999
输出
13:00:00
示例 2
输入
1618708103123
输出
01:08:23
评测用例规模与约定
对于所有评测用例,给定的时间为不超过 10^{18}1018 的正整数。
代码

import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改 public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); long num = scan.nextLong(); scan.close(); long allseconds = num/1000; long seconds = allseconds%60; long allmins = allseconds/60; long mins = allmins%60; long allhours = allmins/60; long hours = allhours%24; String date = String.format("%02d", hours)+":"+String.format("%02d", mins)+":"+String.format("%02d", seconds); System.out.println(date); } }
8.最短路
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
如下图所示,GG 是一个无向图,其中蓝色边的长度是 11、橘色边的长度是 22、绿色边的长度是 33。
则从 AA 到 SS 的最短距离是多少?
代码

import java.util.*; public class Main { private static final Scanner in = new Scanner(System.in); private static List<int[]> edges = new ArrayList<>(); public static void main(String[] args) { add('A', 'C', 1); add('A', 'D', 1); add('A', 'E', 1); add('D', 'E', 1); add('E', 'I', 1); add('D', 'H', 1); add('H', 'I', 1); add('B', 'G', 1); add('F', 'G', 1); add('F', 'J', 1); add('K', 'N', 1); add('L', 'M', 1); add('N', 'P', 1); add('P', 'O', 1); add('O', 'Q', 1); add('Q', 'M', 1); add('L', 'R', 1); add('S', 'R', 1); add('M', 'S', 1); add('A', 'B', 2); add('B', 'J', 2); add('D', 'I', 2); add('D', 'G', 2); add('G', 'K', 2); add('K', 'P', 2); add('J', 'S', 2); add('M', 'N', 2); add('H', 'L', 2); add('E', 'I', 3); add('I', 'M', 3); add('G', 'I', 3); add('C', 'D', 3); add('C', 'G', 3); add('C', 'F', 3); add('O', 'R', 3); add('K', 'L', 3); int n = edges.size(); int[] dist = new int[128]; Arrays.fill(dist, Integer.MAX_VALUE >> 1); dist['A'] = 0; for (int i = 0; i < n - 1; i++) { for (int[] edge : edges) { int u = edge[0], v = edge[1], w = edge[2]; dist[v] = Math.min(dist[v], dist[u] + w); } } System.out.println(dist['S']); } private static void add(char u, char v, int w) { edges.add(new int[] {u, v, w}); edges.add(new int[] {v, u, w}); } }
9.回文日期
题目描述
2020 年春节期间,有一个特殊的日期引起了大家的注意:2020 年 2 月 2 日。因为如果将这个日期按 “yyyymmdd” 的格式写成一个 8 位数是 20200202,恰好是一个回文数。我们称这样的日期是回文日期。
有人表示 20200202 是 “千年一遇” 的特殊日子。对此小明很不认同,因为不到 2 年之后就是下一个回文日期:20211202 即 2021 年 12 月 2 日。
也有人表示 20200202 并不仅仅是一个回文日期,还是一个 ABABBABA 型的回文日期。对此小明也不认同,因为大约 100 年后就能遇到下一个 ABABBABA 型的回文日期:21211212 即 2121 年 12 月 12 日。算不上 “千年一遇”,顶多算 “千年两遇”。
给定一个 8 位数的日期,请你计算该日期之后下一个回文日期和下一个 ABABBABA 型的回文日期各是哪一天。
输入描述
输入包含一个八位整数 NN,表示日期。
对于所有评测用例,10000101 \leq N \leq 8999123110000101≤N≤89991231,保证 NN 是一个合法日期的 8 位数表示。
输出描述
输出两行,每行 1 个八位数。第一行表示下一个回文日期,第二行表示下一个 ABABBABA 型的回文日期。
输入输出样例
示例
输入
20200202
输出
20211202
21211212
代码

import java.util.*; import java.text.SimpleDateFormat; //思路:截取用户输入的年份,把年份倒多来再拼接上去形成年月日,再来判断日期是否合法 和 是否符合ABAB型 public class Main{ public static void main(String[] args) { Scanner scan = new Scanner(System.in); int n = scan.nextInt(); String num = Integer.toString(n); // boolean condition1 = false, condition2 = false; // 循环一次加一年 for (int i = n; !condition1 || !condition2; i += 10000) { String date = Integer.toString(i); // 截取年份字符串也就是前半部分,再做反转接在后面形成回文 StringBuffer sb = new StringBuffer(date.substring(0, 4)); String sb2 = sb.reverse().toString(); String string = sb.reverse().toString().concat(sb2); // 判断回文是否合法 if (!condition1 && isDate(string) && string.compareTo(num) > 0) { System.out.println(string); condition1 = true; } // 加上一个判断是否ABAB型 if (!condition2 && isDate(string) && string.compareTo(num) > 0 && string.substring(0, 2).equals(string.substring(2, 4))) { System.out.println(string); condition2 = true; } } scan.close(); } // 判断是否合法日期 public static boolean isDate(String date) { String dt = date.substring(0, 4) + "-" + date.substring(4, 6) + "-" + date.substring(6, 8); // 日期格式化 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); try { // 设为false能严格验证日期 sdf.setLenient(false); // 解析生成日期 不合法就抛出异常 sdf.parse(dt); } catch (Exception e) { return false; } return true; } }
10.门牌制作
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小蓝要为一条街的住户制作门牌号。
这条街一共有 20202020 位住户,门牌号从 11 到 20202020 编号。
小蓝制作门牌的方法是先制作 00 到 99 这几个数字字符,最后根据需要将字符粘贴到门牌上,例如门牌 1017 需要依次粘贴字符 1、0、1、71、0、1、7,即需要 11 个字符 00,22 个字符 11,11 个字符 77。
请问要制作所有的 11 到 20202020 号门牌,总共需要多少个字符 22?
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
代码

import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改 public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); //在此输入您的代码... int count = 0; String str = ""; for(int i=0; i<=2020; i++){ str = i + ""; for(int j=0; j<str.length(); j++){ if(str.charAt(j)=='2') count++; } } System.out.println(count); scan.close(); } }

import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改 public class Main { public static void main(String[] args) { int count = 0; for(int i = 1; i <= 2020; i++) { int num = i; while(num != 0) { if(num%10==2) { count ++; } num /= 10; } } System.out.println(count); } }
11.购物单
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小明刚刚找到工作,老板人很好,只是老板夫人很爱购物。老板忙的时候经常让小明帮忙到商场代为购物。小明很厌烦,但又不好推辞。
这不,大促销又来了!老板夫人开出了长长的购物单,都是有打折优惠的。
小明也有个怪癖,不到万不得已,从不刷卡,直接现金搞定。
现在小明很心烦,请你帮他计算一下,需要从取款机上取多少现金,才能搞定这次购物。
取款机只能提供 100100 元面额的纸币。小明想尽可能少取些现金,够用就行了。 你的任务是计算出,小明最少需要取多少现金。
以下是让人头疼的购物单,为了保护隐私,物品名称被隐藏了。
**** 180.90 88折
**** 10.25 65折
**** 56.14 9折
**** 104.65 9折
**** 100.30 88折
**** 297.15 半价
**** 26.75 65折
**** 130.62 半价
**** 240.28 58折
**** 270.62 8折
**** 115.87 88折
**** 247.34 95折
**** 73.21 9折
**** 101.00 半价
**** 79.54 半价
**** 278.44 7折
**** 199.26 半价
**** 12.97 9折
**** 166.30 78折
**** 125.50 58折
**** 84.98 9折
**** 113.35 68折
**** 166.57 半价
**** 42.56 9折
**** 81.90 95折
**** 131.78 8折
**** 255.89 78折
**** 109.17 9折
**** 146.69 68折
**** 139.33 65折
**** 141.16 78折
**** 154.74 8折
**** 59.42 8折
**** 85.44 68折
**** 293.70 88折
**** 261.79 65折
**** 11.30 88折
**** 268.27 58折
**** 128.29 88折
**** 251.03 8折
**** 208.39 75折
**** 128.88 75折
**** 62.06 9折
**** 225.87 75折
**** 12.89 75折
**** 34.28 75折
**** 62.16 58折
**** 129.12 半价
**** 218.37 半价
**** 289.69 8折
需要说明的是,8888 折指的是按标价的 88%88 计算,而 88 折是按 80%80 计算,余者类推。 特别地,半价是按 50%50 计算。
请输出小明要从取款机上提取的金额,单位是元。
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
代码

import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改 public class Main{ public static void main(String []args){ double sum = 180.90*0.88+10.25*0.65+56.14*0.9+104.65*0.9+100.30*0.88+297.15*0.5+26.75*0.65+130.62*0.5+240.28*0.58+270.62*0.8+115.87*0.88+247.34*0.95+73.21*0.9+101.00*0.5+79.54*0.5+278.44*0.7+199.26*0.5+12.97*0.9+166.30*0.78+125.50*0.58+84.98*0.9+113.35*0.68+166.57*0.5+42.56*0.9+81.90*0.95+131.78*0.8+255.89*0.78+109.17*0.9+146.69*0.68+139.33*0.65+141.16*0.78+154.74*0.8+59.42*0.8+85.44*0.68+293.70*0.88+261.79*0.65+11.30*0.88+268.27*0.58+128.29*0.88+251.03*0.8+208.39*0.75+128.88*0.75+62.06*0.9+225.87*0.75+12.89*0.75+34.28*0.75+62.16*0.58+129.12*0.5+218.37*0.5+289.69*0.8; System.out.println((int)(sum+100)/100*100); } }
12.成绩分析
题目描述
小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数。
请计算这次考试的最高分、最低分和平均分。
输入描述
输入的第一行包含一个整数 n\ (1 ≤ n ≤ 10^4)n (1≤n≤104),表示考试人数。
接下来 nn 行,每行包含一个 0 至 100 的整数,表示一个学生的得分。
输出描述
输出三行。
第一行包含一个整数,表示最高分。
第二行包含一个整数,表示最低分。
第三行包含一个实数,四舍五入保留正好两位小数,表示平均分。
输入输出样例
示例
输入
7
80
92
56
74
88
99
10
输出
99
10
71.29
运行限制
- 最大运行时间:1s
- 最大运行内存: 256M
代码

import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改 public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); //在此输入您的代码... double num = scan.nextInt(); int max = 0; int min = 100; //int sum; double sum = 0;// for(int i = 0; i < num; i++){ int j = scan.nextInt(); if(max < j) max = j; if(min > j) min = j; sum += j; } double ave = sum/num; System.out.println(max); System.out.println(min); System.out.printf("%.2f",ave);//注意 是prinf不是println scan.close(); } }
13.数字三角形
题目描述
上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。
路径上的每一步只能从一个数走到下一层和它最近的左边的那个数或者右 边的那个数。此外,向左下走的次数与向右下走的次数相差不能超过 1。
输入描述
输入的第一行包含一个整数 N\ (1 \leq N \leq 100)N (1≤N≤100),表示三角形的行数。
下面的 NN 行给出数字三角形。数字三角形上的数都是 0 至 100 之间的整数。
输出描述
输出一个整数,表示答案。
输入输出样例
示例
输入
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
输出
27
运行限制
- 最大运行时间:1s
- 最大运行内存: 256M
代码

import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改 public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int[][] arr = new int[N][N]; int[][] dp = new int[N][N]; for(int i=0;i<N;i++) { for(int j=0;j<=i;j++) { arr[i][j] = sc.nextInt(); } } sc.close(); dp[0][0] = arr[0][0]; for(int i=1;i<N;i++) { dp[i][0] = dp[i-1][0] + arr[i][0]; } for(int i=1;i<N;i++) { for(int j=1;j<=i;j++) { dp[i][j] = arr[i][j] + Math.max(dp[i-1][j], dp[i-1][j-1]); } } if(N%2!=0) { System.out.println(dp[N-1][N/2]); }else { System.out.println(Math.max(dp[N-1][N/2], dp[N-1][N/2-1])); } } }
14.跑步锻炼
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小蓝每天都锻炼身体。
正常情况下,小蓝每天跑 11 千米。如果某天是周一或者月初(11 日),为了激励自己,小蓝要跑 22 千米。如果同时是周一或月初,小蓝也是跑 22 千米。
小蓝跑步已经坚持了很长时间,从 20002000 年 11 月 11 日周六(含)到 20202020 年 1010 月 11 日周四(含)。请问这段时间小蓝总共跑步多少千米?
代码

import java.util.*; // 1:无需package // 2: 类名必须Main, 不可修改 public class Main { public static void main(String[] args) { Calendar calendar = Calendar.getInstance(); calendar.set(2000, 0, 1); int count = 0; while (true) { calendar.add(calendar.DAY_OF_YEAR,1); if (calendar.get(calendar.DAY_OF_WEEK) == 2 || calendar.get(calendar.DAY_OF_MONTH) == 1 ){ count += 2; }else { count ++; } // 从0开始计算,因此10月1日表示为9和2 if (calendar.get(calendar.YEAR) == 2020 && calendar.get(calendar.MONTH) == 9 && calendar.get(calendar.DAY_OF_MONTH) == 2) { break; } } System.out.print(count + 1); } }
15.Z形字符
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
如下图所示,小明用从 11 开始的正整数“蛇形”填充无限大的矩阵。
1 2 6 7 15 ...
3 5 8 14 ...
4 9 13 ...
10 12 ...
11 ...
...
容易看出矩阵第二行第二列中的数是 55。请你计算矩阵中第 2020 行第 2020 列的数是多少?
代码

16.等差素数列
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
2,3,5,7,11,13,....2,3,5,7,11,13,.... 是素数序列。 类似:7,37,67,97,127,1577,37,67,97,127,157 这样完全由素数组成的等差数列,叫等差素数数列。
上边的数列公差为 3030,长度为 66。
20042004 年,格林与华人陶哲轩合作证明了:存在任意长度的素数等差数列。 这是数论领域一项惊人的成果!
有这一理论为基础,请你借助手中的计算机,满怀信心地搜索:
长度为 1010 的等差素数列,其公差最小值是多少?
代码

import java.util.*; // 1:无需package // 2: 类名必须Main, 不可修改 // 1:无需package // 2: 类名必须Main, 不可修改 public class Main { public static void main(String[] args) { for(int i = 1;i<10000;i++){//指定初值 for(int j = 1;j<1000;j++){//指定公差 int k; for(k=0;k<=9;k++){//看10个数是否为素数 if(!isPrime(i+k*j)) break; } if(k==10) { System.out.println(j); return ; } } } } public static boolean isPrime(int num){ for(int i = num-1;i>1;i--){ if(num%i==0) return false; } return true; } }

import java.util.ArrayList; import java.util.Arrays; public class Main { public static void main(String[] args) { int length=10000000,c=1000; boolean[]b=new boolean[length]; Arrays.fill(b, true); for(int i=2;i*i<length;i++) for(int j=i*i;j<length;j+=i) b[j]=false; ArrayList<Integer> list = new ArrayList<Integer>(); for(int i=2;i*i<length;i++) if(b[i]) list.add(i); int[][] x=new int[list.size()][c]; for(int i=0;i<list.size();i++){ Integer integer = list.get(i); for (int j = 1; j < c; j++) { if(list.contains(integer-j)) x[i][j]=x[list.indexOf(integer-j)][j]+1; if(x[i][j]==9) { System.out.println(j); return; }} } } }
17.组队
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
作为篮球队教练,你需要从以下名单中选出 11 号位至 55 号位各一名球员,组成球队的首发阵容。
每位球员担任 11 号位至 55 号位时的评分如下表所示。请你计算首发阵容 11 号位至 55 号位的评分之和最大可能是多少?
代码

import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改 public class Main { public static void main(String[] args){ int [] num1 = {97,92,0,0,89,82,0,0,0,95,0,0,94,0,0,0,98,93,0,0}; int [] num2 = {90,85,0,0,83,86,0,97,0,99,0,0,91,83,0,0,83,87,0,99}; int [] num3 = {0,96,0,0,97,0,0,96,89,0,96,0,0,87,98,0,99,92,0,96}; int [] num4 = {0,0,0,80,0,0,87,0,0,0,97,93,0,0,97,93,98,96,89,95}; int [] num5 = {0,0,93,86,0,0,90,0,0,0,0,98,0,0,98,86,81,98,92,81}; int max = 0;//存储最大值 //运用for循环,依次相加比较 for( int n1 = 0 ; n1 < 20 ; n1++ ){ for( int n2 = 0 ; n2 < 20 ; n2++ ){ for( int n3 = 0 ; n3 < 20 ; n3++ ){ for( int n4 = 0 ; n4 < 20 ; n4++ ){ for( int n5 = 0 ; n5 < 20 ; n5++ ){ //限定条件:每号位只能选一个人,转换为程序思想,即数组下标不能一样 if( n1 != n2 && n1 != n3 && n1 != n4 && n1 != n5 && n2 != n3 && n2 != n4 && n2 != n5 && n3 != n4 && n3 != n5 && n4 != n5){ if ( max < num1[n1] + num2[n2] + num3[n3] + num4[n4] + num5[n5] ) { max = num1[n1] + num2[n2] + num3[n3] + num4[n4] + num5[n5]; //System.out.println(n1+","+n2+","+n3+","+n4+","+n5); //当 n1 = 0 ; n2 = 9 ; n3 = 14 ; n4 = 16 ; n5 = 11时,有最大值490 } } } } } } } System.out.println(max); } }
18.既约分数
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
如果一个分数的分子和分母的最大公约数是 11,这个分数称为既约分数。
例如 \frac{3}{4} ,\frac{1}{8} ,\frac{7}{1}43,81,17, 都是既约分数。
请问,有多少个既约分数,分子和分母都是 11 到 20202020 之间的整数(包括 11 和 20202020)?
代码

import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改 //辗转相除法 public class Main { public static void main(String[] args) { int sum = 0; for (int i = 1; i <= 2020; i++) { for (int j = 1; j <= 2020; j++) { if (gcd(i, j) == 1) { sum++; } } } System.out.println(sum); } //求最大公约数的一个数学公式,辗转相除法, //欧几里得算法又称辗转相除法,是指用于计算两个非负整数a,b的最大公约数。应用领域有数学和计算机两个方面。计算公式gcd(a,b) = gcd(b,a mod b)。 //欧几里得算法和扩展欧几里得算法可使用多种编程语言实现。 public static int gcd(int a, int b) { //当b为0时,a就是他的们间的最大公约数 return b==0? a : gcd(b, a%b); } }
19.特别数的和
题目描述
小明对数位中含有 2、0、1、9 的数字很感兴趣(不包括前导 0),在 1 到 40 中这样的数包括 1、2、9、10 至 32、39 和 40,共 28 个,他们的和是 574。
请问,在 1 到 nn 中,所有这样的数的和是多少?
输入描述
输入格式:
输入一行包含两个整数 n(1 \leq n \leq 10^4)n(1≤n≤104)。
输出描述
输出一行,包含一个整数,表示满足条件的数的和。
输入输出样例
示例
输入
40
输出
574
代码

import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); long sum = 0; for (int i = 1; i <= n; i++) { if (cheak(i)) { sum += i; } } System.out.println(sum); sc.close(); } private static boolean cheak(int n) { while (n != 0) { int a = n % 10; if (a == 2 || a == 0 || a == 1 || a == 9) { return true; } n /= 10; } return false; } }
20.作物杂交
题目描述
作物杂交是作物栽培中重要的一步。已知有 NN 种作物 (编号 11 至 NN ),第 ii 种作物从播种到成熟的时间为 T_iTi。作物之间两两可以进行杂交,杂交时间取两种中时间较长的一方。如作物 A 种植时间为 5 天,作物 B 种植时间为 7 天,则 AB 杂交花费的时间为 7 天。作物杂交会产生固定的作物,新产生的作物仍然属于 NN 种作物中的一种。
初始时,拥有其中 MM 种作物的种子 (数量无限,可以支持多次杂交)。同时可以进行多个杂交过程。求问对于给定的目标种子,最少需要多少天能够得到。
如存在 4 种作物 ABCD,各自的成熟时间为 5 天、7 天、3 天、8 天。初始拥有 AB 两种作物的种子,目标种子为 D,已知杂交情况为 A × B → C,A × C → D。则最短的杂交过程为:
第 1 天到第 7 天 (作物 B 的时间),A × B → C。
第 8 天到第 12 天 (作物 A 的时间),A × C → D。
花费 12 天得到作物 D 的种子。
输入描述
输入的第 1 行包含 4 个整数 N, M, K, TN,M,K,T,NN 表示作物种类总数 (编号 11 至 NN),MM 表示初始拥有的作物种子类型数量,KK 表示可以杂交的方案数,TT 表示目标种子的编号。
第 2 行包含 NN 个整数,其中第 ii 个整数表示第 ii 种作物的种植时间 T_i\ (1 \leq T_i \leq 100)Ti (1≤Ti≤100)。
第 3 行包含 MM 个整数,分别表示已拥有的种子类型 K_j\ (1 \leq K_j \leq M)Kj (1≤Kj≤M),K_jKj 两两不同。
第 4 至 KK + 3 行,每行包含 3 个整数 A, B,CA,B,C,表示第 AA 类作物和第 BB 类作物杂交可以获得第 CC 类作物的种子。
其中,1 \leq N \leq 2000, 2 \leq M \leq N, 1 \leq K \leq 10^5, 1 \leq T \leq N1≤N≤2000,2≤M≤N,1≤K≤105,1≤T≤N, 保证目标种子一定可以通过杂交得到。
输出描述
输出一个整数,表示得到目标种子的最短杂交时间。
输入输出样例
示例
输入
6 2 4 6
5 3 4 6 4 9
1 2
1 2 3
1 3 4
2 3 5
4 5 6
输出
16
样例说明
第 1 天至第 5 天,将编号 1 与编号 2 的作物杂交,得到编号 3 的作物种子。
第 6 天至第 10 天,将编号 1 与编号 3 的作物杂交,得到编号 4 的作物种子。
第 6 天至第 9 天,将编号 2 与编号 3 的作物杂交,得到编号 5 的作物种子。
第 11 天至第 16 天,将编号 4 与编号 5 的作物杂交,得到编号 6 的作物种子。
总共花费 16 天。
代码

import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改 public class Main { static int n;//作物总类数 static int m;//初始拥有作物种类数 static int k;//方案数 static int t;//目标作物编号 static int total_time = 0;//总时长 static int[] time;//作物成熟时间 static int[][] task;//方案 static int[] flag;//得到的种子作物种类情况 static void dfs(int t){ for (int i = 0; i < k; i++) { if(task[i][2]==t){ if(flag[task[i][0]]!=1||flag[task[i][1]]!=1){ total_time += Math.max(time[task[i][0]],time[task[i][1]]); //System.out.println(i); if(flag[task[i][0]]!=1){ dfs(task[i][0]); } if(flag[task[i][1]]!=1){ dfs(task[i][1]); } flag[t]=1; } } } } public static void main(String[] args) { Scanner sc = new Scanner(System.in); n = sc.nextInt(); m = sc.nextInt(); k = sc.nextInt(); t = sc.nextInt(); time = new int[n+1]; task = new int[k][3]; flag = new int[n+1]; int p; for (int i = 1; i <= n; i++) { time[i] = sc.nextInt() - 1; } for (int i = 1; i < m+1; i++) { p = sc.nextInt(); /*flag[p] = 1;*/ } for(int i = 0;i < k; i++){ for(int j = 0;j < 3;j++){ task[i][j] = sc.nextInt(); } } flag[t] = 1; dfs(t); System.out.println(total_time); } }
21.子串分值
题目描述
对于一个字符串 SS,我们定义 SS 的分值 f(S)f(S) 为 SS 中恰好出现一次的字符个数。例如 f(aba) = 1,f(abc) = 3, f(aaa) = 0f(aba)=1,f(abc)=3,f(aaa)=0。
现在给定一个字符串 S_{0 \cdots n − 1}S0⋯n−1(长度为 nn,1 \leq n \leq 10^51≤n≤105),请你计算对于所有 SS 的非空子串 S_{i \cdots j}(0 ≤ i ≤ j < n)Si⋯j(0≤i≤j<n),f(S_{i \cdots j})f(Si⋯j) 的和是多少。
输入描述
输入一行包含一个由小写字母组成的字符串 SS。
输出描述
输出一个整数表示答案。
输入输出样例
示例
输入
ababc
输出
21
代码

import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改 /** 可以用一个循环把字符串都遍历完, 我们只需要将每一个元素含有多少个符合包含该元素且只出现一次的子串, 然后将所有元素的符合子串个数相加,就可以了。 推出公式为(i - left)(right - i) left和right分别是左右碰到a或者结束的时候的下标 */ public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); String str = scan.next(); //字符串的长度 int len = str.length(); //定义左游标 右游标 和 字串分值总和变量 int left,right,sum = 0; for(int i = 0; i < len; i++) { for(right = i + 1; right < len; right++) { //如果此时遇到了相同的字符 停止 if(str.charAt(right) == str.charAt(i)) { break; } } for(left = i - 1; left >= 0; left--) { if(str.charAt(left) == str.charAt(i)) { break; } } sum += (i - left) * (right - i); } System.out.println(sum); scan.close(); } }
22.数列求和
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
给定数列 1, 1, 1, 3, 5, 9, 17, \cdots1,1,1,3,5,9,17,⋯,从第 44 项开始,每项都是前 33 项的和。
求第 2019032420190324 项的最后 44 位数字。
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
代码

import java.util.Scanner; /** * 20190324 这个数过于庞大 无论是递归还是迭代 程序都无法正常运行, 而且int 、 long、BigDecimal等都无法、承载这么大的数 * 题目要求我们只取最后四位 , 那我们可以对每次运算出来的结果 %10000 这样每次结果就都保留最后四位数字 */ public class Main { public static void main(String[] args) { int a = 1,b = 1,c = 1,d = 0; for(int i = 4;i<=20190324;i++){ d = (a+b+c)%10000; a = b; b = c; c = d; } System.out.println(d); } }
23.棋盘放麦子
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
你一定听说过这个故事。国王对发明国际象棋的大臣很佩服,问他要什么报酬,大臣说:请在第 11 个棋盘格放 11 粒麦子,在第 22 个棋盘格放 22 粒麦子,在第 33 个棋盘格放 44 粒麦子,在第 44 个棋盘格放 88 粒麦子,......后一格的数字是前一格的两倍,直到放完所有棋盘格(国际象棋共有 6464 格)。
国王以为他只是想要一袋麦子而已,哈哈大笑。
当时的条件下无法准确计算,但估算结果令人吃惊:即使全世界都铺满麦子也不够用!
请你借助计算机准确地计算,到底需要多少粒麦子。
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
代码

import java.util.Scanner; import java.math.BigInteger; /* 前言 在Java中,由CPU原生提供的整型最大范围是64位 long 型整数。使用 long 型整数可以直接通过CPU指令进行计算,速度非常快。 但是如果我们使用的整数范围超过了 long 型怎么办?这个时候,就只能用软件来模拟一个大整数。 java.math.BigInteger 就是用来表示任意大小的整数。 BigInteger 内部用一个 int[] 数组来模拟一个非常大的整数。 常用的两种定义方式 BigInteger a=new BigInteger("123"); //没有参数为long的构造函数,用字符串来构造 BigInteger b=BigInteger.valueOf(123); //静态方法,返回val对应的BigInteger BigInteger类中定义了四则运算的方法,add,subtract,multiply,divide。对 BigInteger 做运算的时候,只能使用实例方法。 如: a=a.add(b); */ public class Main { public static void main(String[] args) { // TODO Auto-generated method stub BigInteger sum = BigInteger.valueOf(1); BigInteger add = BigInteger.valueOf(1); BigInteger mul = BigInteger.valueOf(2); for (int i=0;i<63;i++) { add = add.multiply(mul); sum = sum.add(add); } System.out.println(sum); } }
24.七段码
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小蓝要用七段码数码管来表示一种特殊的文字。
上图给出了七段码数码管的一个图示,数码管中一共有 77 段可以发光的二 极管,分别标记为 a, b, c, d, e, f, ga,b,c,d,e,f,g。
小蓝要选择一部分二极管(至少要有一个)发光来表达字符。在设计字符 的表达时,要求所有发光的二极管是连成一片的。
例如:bb 发光,其他二极管不发光可以用来表达一种字符。
例如 cc 发光,其他二极管不发光可以用来表达一种字符。这种方案与上 一行的方案可以用来表示不同的字符,尽管看上去比较相似。
例如:a, b, c, d, ea,b,c,d,e 发光,f, gf,g 不发光可以用来表达一种字符。
例如:b, fb,f 发光,其他二极管不发光则不能用来表达一种字符,因为发光 的二极管没有连成一片。
请问,小蓝可以用七段码数码管表达多少种不同的字符?
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
代码

import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.PrintStream; import java.math.BigInteger; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class Main { static int N = 100000 * 4 + 5; static int M = 1000 + 5; static int mod = 1000000009; static Scanner cin = new Scanner(System.in); static int ans = 0, n, m; static ArrayList<Integer> g[] = new ArrayList[N]; //建图 第i个数组的元素都跟i相连 static boolean vis[] = new boolean[N]; //判断当前这条线段是否被递归过 static boolean dp[] = new boolean[N]; //二进制判重 static int a[] = new int[1<<8]; public static void main(String[] args) { for(int i = 1; i <= 7; i++) g[i] = new ArrayList<Integer>(); //这里就是赋予数字意义 重新连边 add(1, 2); add(1, 6); add(2, 7); add(2, 3); add(3, 4); add(4, 5); add(5, 6); add(5, 7); add(6, 7); add(3, 7); for(int i = 1; i <= 7; i++) { vis[i] = true; //这里枚举是保证至少有一条灯管是亮着的 dfs(i , 1); vis[i] = false; } System.out.println(ans); } private static void dfs(int u, int k) { a[k] = u; //递归的第k条线段是数字编号为u的线段 check(k); //对每个状态都判重 //这里从1枚举到k就是枚举当前联通块相连的边 for(int i = 1; i <= k; i++) { for(int v: g[a[i]]) { if(vis[v]) continue; vis[v] = true; dfs(v, k + 1); vis[v] = false; } } } private static void check(int k) { int res = 0; for(int i = 1; i <= k; i++) //因为每个线段的数字不同 代表的二进制数字也就不同 res += (1<<a[i]); if(dp[res]) return; dp[res] = true; ans++; } private static void add(int i, int j) { g[i].add(j); g[j].add(i); } }
参考
https://blog.csdn.net/jianghxin/article/details/109134914
25.年号字串
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小明用字母 AA 对应数字 11,BB 对应 22,以此类推,用 ZZ 对应 2626。对于 2727 以上的数字,小明用两位或更长位的字符串来对应,例如 AAAA 对应 2727,ABAB 对应 2828,AZAZ 对应 5252,LQLQ 对应 329329。
请问 20192019 对应的字符串是什么?
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
代码

import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改 /* 这一题使用StringBuilder用来存储转换后的字符,因为StringBuilder可以用来存放可变字符。 直接循环,知道n的值小于或者等于0 每次循环都-1是因为这个数是从1开始计算的,但是计算机是从0开始计算的,所以每一次都得-1, 因为n/26的值也是从1开始的。 后面就是使用append()方法把值强制转换成char类型存放到我们创建的对象里面 最后使用reverse()函数让字符颠倒,然后toString()方法输出 */ public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); //在此输入您的代码... int n = 2019; StringBuilder sb = new StringBuilder(); while(n>0){ n --; sb.append((char)(n%26+'A')); n /= 26; } System.out.println(sb.reverse().toString()); } }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)