2021年蓝桥杯省赛JavaB组真题解析.docx

上传人:暗伤 文档编号:35490263 上传时间:2022-08-21 格式:DOCX 页数:10 大小:114.07KB
返回 下载 相关 举报
2021年蓝桥杯省赛JavaB组真题解析.docx_第1页
第1页 / 共10页
2021年蓝桥杯省赛JavaB组真题解析.docx_第2页
第2页 / 共10页
点击查看更多>>
资源描述

《2021年蓝桥杯省赛JavaB组真题解析.docx》由会员分享,可在线阅读,更多相关《2021年蓝桥杯省赛JavaB组真题解析.docx(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、2021年蓝桥杯省赛JavaB组真题解析 距离蓝桥杯省赛还有1个多,为了拿到更好地成绩,让我们刷起来。 :填空题 1. ASC 已知写字母 A 的 ASCII 码为 65,请问写字母 L 的 ASCII 码是多少? 分析:签到题。看到这题的时候会想,这题咋这么简单,直接计算就,都不需要写程序。实际上,在蓝桥杯省赛中,填空题的前两题和编 程题的第题都是签到题,较简单。但同时,这也是我们要想尽办法拿下来的题,因此定要细,细,再细。同时,我建议简单 的题也最好是编程解决或者计算器计算,毕竟考试的时候紧张的话还是有可能算错最基本的运算的。 import Scanner; 需package / 2: /

2、 1: 类名必须Main,不可修改 public class Main public static void main(String args) System.out.println(int)L); 输出答案: 76 注意:填空题只需要填最后的答案即可,因此可采取所有得到答案的法。暴+合理利具。 2. 卡 蓝有很多数字卡,每张卡上都是数字 0 到 9。 蓝准备这些卡来拼些数,他想从 1 开始拼出正整数,每拼个, 就保 存起来,卡就不能来拼其它数了。 蓝想知道能从 1 拼到多少。 例如,当蓝有 30张卡,其中 0 到 9 各 3 张,则蓝 可以拼出 1 到 10, 但是拼 11 时卡 1 已经只

3、有张了,不够拼出 11。 现在蓝有 0到 9的卡各 2021 张,共 20210 张,请问蓝可以从 11拼到多少? 提:建议使计算机编程解决问题 分析:从1开始遍历,判断遍历到的数可否前的卡拼出来,可以的话,继续遍历,否则输出答案(答案为现在遍历到的数减1)。 import *; / 1:需package / 2:类名必须Main, 不可修改 public class Main public static void main(String args) Scanner scan = new Scanner(System.in); /在此输您的代码. int arr = new int10; Ar

4、rays.fill(arr, 2021); for(int i = 1;i+) int temp = i; while(temp 0) int r = temp % 10; if(arrr 0) arrr-; else break; temp /= 10; if(temp 0) System.out.println(i - 1); break; scan.close(); 输出答案: 3181 对于这道题,如果想要验证得到的答案是否正确的话。可以修改下程序,主动输个n,n表有0到9的卡各n张,然后输3, 如果输出的是10,则意味着的计算是正确的。 3. 直线 在平直坐标系中,两点可以确定条直线

5、。如果有多点在条直线上, 那么这些点中任意两点确定的直线是同条。 给定平上 2 3 个整点 (x,y)|0 x 2,0 y 3, x Z,y Z,即横坐标 是 0 到 1 (包含 0 和 1) 之间的整数、纵坐标是 0 到 2 (包含 0 和 2) 之间的整数 的点。这些点共确定了 11 条不同的直线。 给定平上 20 21 个整点 (x,y)|0 x 20,0 y 21, x Z,y Z,即横 坐标是 0 到 19 (包含 0 和 19) 之间的整数、纵坐标是 0 到 20 (包含 0 和 20) 之 间的整数的点。请问这些点共确定了多少条不同的直线。 分析:枚举两个不同的点,两点确定条直线

6、。具体的,直线由y=kx+b表,看有多少种(k,b)的组合。但由于k和b都是浮点数,Java 中是不能够通过=直接判断两个浮点数是否相等的,为此我们(b2 - b1) / (a2 - a1) (b1 * (a2 - a1) - a1 * (b2 - b1) / (a2 - a1)字 符串的形式表根直线。然后通过Set集合去重,定义的类需要通过重写equals法和hashCode()法才能被Set集合去重。 import *; public class Main public static void main(String args) Set ans = new HashSet(); for(i

7、nt a1 = 0; a1 = 19; a1+) for(int b1 = 0; b1 = 20; b1+) for(int a2 = 0; a2 = 19; a2+) for(int b2 = 0; b2 = 20; b2+) / 斜率不存在和斜率为0的特殊情况,我们可以动计算需特殊判断 if(a1 = a2 | b1 = b2) continue; / 以分/分母的形式表达斜率k和截距b时,分和分母需要是最简的形式 StringBuilder sb = new StringBuilder(); int up = b2 - b1; int down = a2 - a1; int r = gc

8、d(up, down); sb.append(up / r + ); sb.append(down / r + ); up = b1 * down - a1 * up; r = gcd(up, down); sb.append(up / r + ); sb.append(down / r); ans.add(sb.toString(); / 斜率不存在的直线20根,斜率为0的直线21根 System.out.println(ans.size() + 20 + 21); static int gcd(int a, int b) return b = 0 ? a : gcd(b, a % b);

9、输出: 40257 4. 货物摆放 现在,蓝有 n箱货物要摆放在仓库,每箱货物都是规则的正体。蓝规定了长、宽、三个互相垂直的向,每箱货物的边都必 须严格平于长、宽、。 蓝希望所有的货物最终摆成个的长体。即在长、宽、的向上分别堆 L、W、H 的货物,满n=LWH。 给定 n,请问有多少种堆放货物的案满要求。 例如,当 n = 4 时,有以下 6 种案:114、122、141、212、2 2 1、4 1 1。 请问,当 n = 2021041820210418(注意有 16位数字)时,总共有多少种案? 提:建议使计算机编程解决问题。 分析:给出个数n,求多少个三元组(L,W,H)使得L x W x

10、 H等于n。同时三元组是考虑顺序的,L,W,H是n的因数,即n % L = 0 & n % W = 0 & n % H = 0,为此,我们可以先将n的所有因数求出来,然后三重循环遍历L,W,H,若它们相乘等于n,则找到了 种案。(暴) import *; / 1:需package / 2:类名必须Main,不可修改 public class Main public static void main(String args) / 常数默认值为int,告诉编译器它是long型常量 long n = 2021041820210418l; int ans = 0; List l = new Array

11、List(); for(long i = 1; i = Math.sqrt(n); i+) if(n % i = 0) l.add(i); if(i != n / i) l.add(n / i); for(int i = 0; i l.size(); i+) for(int j = 0; j n) continue; for(int k = 0; k l.size(); k+) if(l.get(i) * l.get(j) * l.get(k) = n) ans+; System.out.println(ans); 输出答案: 2430 路径 5. 蓝学习了最短路径之后特别兴,他定义了个特别的

12、图,希望找到图 中的最短路径。 蓝的图由 2021 个结点组成,依次编号 1 2021。 对于两个不同的结点 a, b,如果 a 和 b 的差的绝对值于 21,则两个结点 之间没有边相连;如果 a 和 b 的差的绝对值于等于 21,则两个点之间有条 长度为 a 和 b 的最公倍数的向边相连。 例如:结点 1 和结点 23 之间没有边相连;结点 3 和结点 24 之间有条 向边,长度为 24;结点 15 和结点 25 之间有条向 边,长度为 75。 请计算,结点 1 和结点 2021 之间的最短路径长度是多少。 提:建议使计算机编程解决问题。 分析:题意思很明确,求源点到某个点的最短路径。最短路

13、问题有两个常见的算法,Dijkstra算法和Floyed算法。本题适合Dijkstra算 法,为此我们先建图,图维矩阵e存储,dist数组表源点到某个点的最短距离。最后输出dist2021的值。 import *; / 1:需package / 2: 类名必须Main, 不可修改 public class Main public static void main(String args) int e = new int20222022; int dist = new int2022; boolean visit = new boolean2022; Arrays.fill(dist, Inte

14、ger.MAX_VALUE); for(int i = 1; i = 2021; i+) for(int j = 1; j = 2021; j+) if(i = j) eij = 0; else if(Math.abs(i - j) = 21) eij = i * j / gcd(i, j); else eij = Integer.MAX_VALUE; dist1 = 0; for(int i = 1; i = 2021; i+) int u = 0, min = Integer.MAX_VALUE; for(int j = 1; j = 2021; j+) if(!visitj & dist

15、j min) min = distj; u = j; visitu = true; for(int j = 1; j = 2021; j+) if(euj != Integer.MAX_VALUE & distu + euj distj) distj = distu + euj; System.out.println(dist2021); static int gcd(int a, int b) return b = 0 ? a : gcd(b, a % b); 输出答案: 10266837 :编程题 6. 时间显 题描述 蓝要和朋友合作开发个时间显的站。 在服务器上,朋友已经获取了当前的时间

16、,个整数表,值为从 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 输 16187

17、08103123 输出 01:08:23 评测例规模与约定 对于所有评测例,给定的时间为不超过 10的18次的正整数。 运限制 最运时间:1s 最运内存: 512M 分析:签到题,注意1s=1000ms,先将ms转化为s,即n/1000(采整除)。对于这题,需理解取余的含义,即不需要知道它经历了多 少年,算出它对于60s分钟剩了多少秒,对于60min时剩了多少分钟,24h天剩余了多少时即可,剩余多少取余表。 import Scanner; / 1:需package / 2: 类名必须Main, 不可修改 public class Main public static void main(Str

18、ing args) Scanner scan = new Scanner(System.in); /在此输您的代码. long n = scan.nextLong(); n /= 1000; / 1s = 1000ms / 1min = 60s = 60000ms / 1h = 60min = 3600s = 3600000ms System.out.printf(%02d:%02d:%02d, (n % (3600 * 24) / 3600,(n % 3600) / 60,n % 60); scan.close(); 7. 最少砝码 问题描述 你有架天平。现在你要设计套砝码,使得利这些砝码可

19、以称出任意 于等于 N的正整数重量。 那么这套砝码最少需要包含多少个砝码? 注意砝码可以放在天平两边。 输格式 输包含个正整数 N。 输出格式 输出个整数代表答案。 样例输 7 样例输出 3 样例说明 33 个砝码重量是 1、4、6,可以称出 1 7的所有重量。 1 = 1; 2 = 6 4(天平边放 66,另边放 44); 3 = 4 1; 4 = 4; 5 = 6 1; 6 = 6; 7 = 1 + 6; 少于 3 个砝码不可能称出 1 7 的所有重量。 评测例规模与约定 对于所有评测例,1 N 1000000000。 运限制 最运时间:1s 最运内存: 512M 分析:思维题吧,如果以前

20、没做过的话估计是想不到的,反正我看到之后第反应是懵的。看到有的章是这样推理的,称取质量1只需 个砝码1,第个需要称取质量2,这时添加个砝码1可以和第个1组成2,添加砝码2除了可以组成2之外还可以组成3,添加砝码3可以 组成2,3,4,添加砝码4的话就不能得到质量2因此不,由贪的思想第个砝码还是选取砝码3好,然后可以依次退出规律。 应称重量选择的砝码(choice)最终可称到的重量(total) 111 234 5913 142740 total+1choice*3choice*3 + total 通过上表可以找出规律,实际上,由项为1,公为3的等差数列,可以由组成任意正整数。 import S

21、canner; 需package / 2: / 1: 类名必须Main, 不可修改 public class Main public static void main(String args) Scanner scan = new Scanner(System.in); / 在此输您的代码. int n = scan.nextInt(); int count = 1, now = 1, sum = 1; while(sum n) count+; now *= 3; sum += now; System.out.println(count); scan.close(); 杨辉三形 8. 下的图形

22、是著名的杨辉三形: 如果我们按从上到下、从左到右的顺序把所有数排成列,可以得到如下数列: 1, 1, 1, 1, 2, 1, 1, 3, 3, 1, 1, 4, 6, 4, 1, 给定个正整数 N,请你输出数列中第次出现 N是在第个数? 输描述 输个整数 N。 输出描述 输出个整数代表答案。 输输出样例 例 1 输 6 输出 13 评测例规模与约定 对于 20% 的评测例,1N10; 对于所有评测例,1N1000000000。 运限制 最运时间:1s 最运内存: 256M 分析:是偏思维的题,这还是家所讨论的暴杯吗。虽然考试的时候,我们可能想不到能够AC的代码,但定不能留空,哪怕写的 是纯暴的

23、代码也给它交上去,蓝桥杯是按点给分的(总共10个计分点),且题这不是明显的暗吗对于 20% 的评测 例,1N10。好了进正题,杨辉三实际上就是个排列组合的表格。要是数据少的话我们还能通过极限打表给它打出来,但题给 出的n的最值有10的9次,为此我们需要尽可能的优化,毕竟优化之后可能能多过个点呢。优化第步:从图中可以看出,每 左边的数与右边的数对称,因此在遍历的时候,我们可以只遍历左边的图,且最值第次出现定是在图的左边。但这样还是AC不了。 优化第步:考虑左边图形的斜,第0斜的开始是(C00),第1斜的开始是(C21),第2斜的开始是(C42)依次第n斜的开始是 (C2nn),且每斜是单调递增的

24、,下的斜上的斜。可以计算到n取最值也是在第16斜可以遍历到,因此我们对于输 的n,从第16斜往第0斜遍历,直到第次找到。对于每斜采分查找。哎,反正我是没想到这么巧妙的法,长长见识。 import Scanner; / 1:需package / 2:类名必须Main, 不可修改 public class Main static int n; public static void main(String args) Scanner scan = new Scanner(System.in); /在此输您的代码. n = scan.nextInt(); for(int i = 16;i-) if(c

25、heck(i) break; scan.close(); static boolean check(int i) / 分该斜,找到于等于该值的第个数 / 左边界2k,右边界为max(l, n)取者最,避免右边界于左边界 int r = 2 * i, l = Math.max(n,r); while(r = n) l = mid; else r = mid + 1; if(C(r, i) != n) return false; else / 1L * (r + 1) * r / 2中这个1L是不能少的,因为r是int类型的,如果没有1L将表达式的值提到/ long 有作 System.out.p

26、rintln(long) (1l * (r + 1) * r / 2) + i + 1); return true; static long C(int a, int b) long ans = 1; for(int i = a, j = 1; j n) / 避免ans超过long的最值 return ans; return ans; 双向排序 9. 说实话看不太懂 括号序列 10. long没 的话,表达式的值会先溢出,这时在强制转化为 从上这套真题可以看出蓝桥杯的题难易分明,也不是家中常说的暴杯。虽然说确实有签到送分题,但也不会缺少思维题 (好难啊),对于思维题是在想不出的话还是暴拿部分样例分吧

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁