第十二届蓝桥杯 Java B 组省赛填空题解析

第一题

【问题描述】

已知大写字母 AAA 的 ASCIIASCIIASCII 码值为 656565, 那么大写字母 LLL 的 ASCIIASCIIASCII 码值为多少?

【思路】

签到题

【代码】

public class Q1 {public static void main(String[] args) {System.out.println((int) ('A'));}
}

【答案】

76

第二题

【问题描述】

【思路】

用数组记录每个数字使用的次数,当拼到 iii 时的某一位数字不够用,则答案为 i−1i - 1i−1

【代码】

import java.util.Arrays;public class Q2 {static int[] a = new int[10];static boolean check(int num) {while (num > 0) {int x = num % 10;if (--a[x] < 0)return false;num /= 10;}return true;}public static void main(String[] args) {Arrays.fill(a, 2021);int i = 0;while (true) {if (!check(++i))break;}System.out.println(i - 1);}
}

【答案】

3181

第三题

【问题描述】

【思路】

我们可以根据任意两个点确定一条直线

1)当直线不平行于 xxx 轴和 yyy 轴时,可以表示为 y=kx+by=kx+by=kx+b 的形式

设两点为 p1(x1,y1),p2(x2,y2)p1(x1,y1),p2(x2,y2)p1(x1,y1),p2(x2,y2) x1≠x2且y1≠y2x1 \neq x2 且 y1\neq y2x1​=x2且y1​=y2 则有

y−y1=((y2−y1)/(x2−x1))∗(x−x1)y-y1=((y2-y1)/(x2-x1))*(x-x1)y−y1=((y2−y1)/(x2−x1))∗(x−x1)

令 y2−y1=dy,x2−x1=dxy2-y1=dy,x2-x1=dxy2−y1=dy,x2−x1=dx

k=dy/dxk=dy/dxk=dy/dx

b=(y1∗dx−x1∗dy)/dxb=(y1*dx-x1*dy)/dxb=(y1∗dx−x1∗dy)/dx

将得到的 kkk 和 bbb 存入 setsetset 中

2)当直线平行于 xxx 轴和 yyy 轴时,只需要加上 xxx 轴和 yyy 轴上的点数

【代码】

1)分数表示,由于浮点数存在精度问题,可以使用分数表示 kkk 和 bbb

import java.util.HashSet;
import java.util.Set;public class Q3 {static int n = 20;static int m = 21;static Set<String> set = new HashSet<>();static int gcd(int x, int y) {return y == 0 ? x : gcd(y, x % y);}public static void main(String[] args) {for (int x1 = 0; x1 < n; x1++) {for (int y1 = 0; y1 < m; y1++) {for (int x2 = 0; x2 < n; x2++) {for (int y2 = 0; y2 < m; y2++) {if (x1 == x2 || y1 == y2) continue;int dy = y2 - y1;int dx = x2 - x1;int g1 = gcd(dx, dy);// 需要将 dy 和 dx 约分String k = (dy / g1) + "/" + (dx / g1);int t = y1 * dx - x1 * dy;int g2 = gcd(t, dx);String b = (t / g2) + "/" + (dx / g2);set.add(k + "," + b);}}}}// 别忘了加上平行于 x 轴和 y 轴的直线System.out.println(set.size() + n + m);}
}
  1. 浮点数表示
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;public class Q3Beta {static int n = 20;static int m = 21;// 精度static double d = 0.000001;static Set<Line> set = new HashSet<>();static class Line {double k;double b;public Line(double k, double b) {this.k = k;this.b = b;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Line line = (Line) o;return Math.abs(line.k - k) < d &&Math.abs(line.b - b) < d;}@Overridepublic int hashCode() {return Objects.hash((int)k, (int)b);}}public static void main(String[] args) {for (int x1 = 0; x1 < n; x1++) {for (int y1 = 0; y1 < m; y1++) {for (int x2 = 0; x2 < n; x2++) {for (int y2 = 0; y2 < m; y2++) {if (x1 == x2 || y1 == y2) continue;double dy = y2 - y1;double dx = x2 - x1;double k = dy / dx;double b = (y1 * dx - x1 * dy) / dx;set.add(new Line(k, b));}}}}System.out.println(set.size() + n + m);}
}

【答案】

40257

第四题

【问题描述】

【思路】

若长宽高为 ABCABCABC 形,则有 666 种方案,即 ABC,ACB,BAC,BCA,CAB,CBAABC,ACB,BAC,BCA,CAB,CBAABC,ACB,BAC,BCA,CAB,CBA

若为 AABAABAAB 形, 则有 333 种方案,即 AAB,ABA,BAAAAB,ABA,BAAAAB,ABA,BAA

若为 AAAAAAAAA 形,则只有 111 种方案

由此可知,

当为 ABCABCABC 形时,设 L<W<HL<W<HL<W<H

则 LLL 最大时小于 20210418202104183=126432.415\sqrt[3]{2021041820210418}=126432.41532021041820210418​=126432.415, 暴力计算是可以接受的

【代码】

public class Q4 {static long n = 2021041820210418L;static int ans;public static void main(String[] args) {// AAB 和 AAA 形式for (long i = 1; i * i <= n; i++) {if (n % (i * i) != 0) continue;long j = n / (i * i);if (j == i)ans++;  // AAA 形式只有一种排列方式elseans += 3; // AAB 形式有三种排列方式}// ABC 形式,i < j < kfor (long i = 1; i * i * i < n; i++) {if (n % i != 0) continue;for (long j = i + 1; j * i < n; j++) {// 若 k = n / (i * j) < j, 则退出循环if (n / (i * j) < j) break;if (n % (i * j) == 0)ans += 6; // ABC 形式有六种排列方式}}System.out.println(ans);}
}

【答案】

2430

第五题

【问题描述】

【思路】

板子题,dijkstradijkstradijkstra 算法

【代码】

import java.util.Arrays;
import java.util.PriorityQueue;public class Q5 {static int[] d = new int[2100];static boolean[] vis = new boolean[2100];static PriorityQueue<Integer> heap = new PriorityQueue<>((o1, o2) -> d[o1] - d[o2]);static int gcd(int x, int y) {return y == 0 ? x : gcd(y, x % y);}static int lcm(int x, int y) {return x * y / gcd(x, y);}static void dijkstra() {Arrays.fill(d, Integer.MAX_VALUE);d[1] = 0;vis[1] = true;for (int i = 2; i <= 22; i++) {d[i] = lcm(1, i);heap.add(i);}while (!heap.isEmpty()) {int v = heap.poll();if (vis[v]) continue;vis[v] = true;if (v == 2021) break;for (int i = Math.max(1, v - 21); i <= Math.min(2021, v + 21); i++) {if (!vis[i]) {d[i] = Math.min(d[i], d[v] + lcm(v, i));heap.add(i);}}}System.out.println(d[2021]);}public static void main(String[] args) {dijkstra();}
}

【答案】

10266837

2021年第十二届蓝桥杯 Java B 组省赛填空题解析相关推荐

  1. 2021年 第12届 蓝桥杯 Java B组 省赛真题详解及小结【第1场省赛 2021.04.18】

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[题目下载.2013年(第4届)~2020年(第11届)] CSDN 蓝桥杯 专栏 2013年 第04届 蓝桥杯 Java B组 省赛真题详解及小结 ...

  2. Java C++ 实现第十二届蓝桥杯 C++ B组 省赛真题(希望能和各位佬能一起讨论算法题:讨论群:99979568)

    山水有相逢 来日皆可期 告辞 虽然是C++组的,但是和Java组的差不了两道题,大家都可以看一看 如有错误,还请佬 评论或私信指出(写的稍些急) 等后面在补充补充解题思路,在补一套C++实现(已完成, ...

  3. 【第十二届蓝桥杯国赛真题】2021年第12届蓝桥杯JAVA B组国赛真题

  4. 2020年 第11届 蓝桥杯 Java B组 省赛真题详解及小结【第1场省赛 2020.7.5】

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2021年(第12届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:部分 ...

  5. 2018年 第9届 蓝桥杯 Java B组 省赛真题详解及总结

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2021年(第12届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:部分 ...

  6. 2021年 第十二届蓝桥杯第二期校内模拟赛题解(Java版)

    时隔多日,终于会写一些简单DP了哈哈哈! 稍微改版,方便阅读,若有错,请指出 2019年 第十届蓝桥杯省赛题解(JavaB组版) 2020年 第十一届蓝桥杯第一场省赛题解(JavaB组版) 2020年 ...

  7. 2020年 第11届 蓝桥杯 Java C组 省赛真题详解及小结【第1场省赛 2020.7.5】

    蓝桥杯 Java B组 省赛真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 注意:部分代码及程序 源自 蓝桥杯 官网视频(历年真题解析) 郑未老师. 2013年 第04届 蓝桥杯 ...

  8. 2019年 第10届 蓝桥杯 Java B组 省赛真题详解及总结

    蓝桥杯 Java B组 省赛真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 注意:部分代码及程序 源自 蓝桥杯 官网视频(历年真题解析) 郑未老师. 2013年 第04届 蓝桥杯 ...

  9. 2017年 第8届 蓝桥杯 Java B组 省赛真题详解及总结

    蓝桥杯 Java B组 省赛真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 注意:部分代码及程序 源自 蓝桥杯 官网视频(历年真题解析) 郑未老师. 2013年 第04届 蓝桥杯 ...

最新文章

  1. Docker镜像优化
  2. 新手探索NLP(六)——全文检索
  3. python如何爬虫股票数据_简单爬虫:东方财富网股票数据爬取(python_017)
  4. C语言 立方体随鼠标转动,HTML5鼠标控制的旋转的立方体
  5. 自定义组件--创建mxml组件
  6. 资源向导之 quot;APUEquot;
  7. [转]30个自我提升技巧
  8. Windows下部署elasticsearch和kibana
  9. 对instance进行二次封装
  10. android selector(转)
  11. 6. PHP bcompiler
  12. VUE项目导入bootstrap
  13. 【干货】Vray渲染器的使用方法
  14. 三步建立自己的电影网站 1 (安装MacCMS10)
  15. 【数字图像处理 8】形态学图像处理
  16. HTML网页设计结课作业——基于HTML+CSS仿学校官网页面
  17. FLASH大厅安装错误3070修复解决方案
  18. 谨赠20篇技术热文营造一个不一样的节日气氛!
  19. 如何利用XGen制作头发,发片-笔记
  20. 浏览器 重定向次数限制_浏览器重定向(302)限制问题

热门文章

  1. C语言程序——按照数据由小到大的顺序输出三个数
  2. CF #737 C. Moamen and XOR
  3. 30人15个教徒跳海
  4. 被动抓病毒的日子(1)【入侵大佬:198.46.202.146】 一种针对Linux服务器疑似挖矿病毒流入
  5. 在VirtualBox上使用Bosh部署Cloud Foundry
  6. shell 循环语句和函数
  7. mysql性能优化2
  8. ios7.1.1固件下载和刷机教程
  9. android悬浮窗 tab,Android WindowManager悬浮窗
  10. 【cocos2d-x 3.7 飞机大战】 决战南海I (九) 飘字特效