2021 第十二届 蓝桥杯省赛第一场 JAVA 大学 B 组

编程入门 行业动态 更新时间:2024-10-11 07:29:52

2021 第十二届 蓝桥杯省赛<a href=https://www.elefans.com/category/jswz/34/1752470.html style=第一场 JAVA 大学 B 组"/>

2021 第十二届 蓝桥杯省赛第一场 JAVA 大学 B 组

小贴士:本文字数6千,粗读约需5分钟,精读约需30分钟

文章目录

  • 观点
  • A. 字母
  • B. 卡片
  • C. 直线
  • D. 货物摆放
  • E. 路径
  • F. 时间显示
  • G. 砝码称重
  • H. 杨辉三角形
  • I. 双向排序
  • J. 括号序列
  • 总结


观点

今年的省赛和以前有点区别,更重视数学,算法,思想了,有点往ACM靠拢,相信这是一个趋势,以后的蓝桥杯将会更重视思维


提示:题目光看不练是不行的,建议打开IDE自己实现一波!!!

A. 字母

题目:字母A的ASCLL码值表示为65,那么字母L转换成ASCLL码值是多少

解题思路
方法一:直接从A(65)开始数到L(76)
方法二:java程序字符L强制转换成int

输出答案:76
代码如下(示例):

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

B. 卡片

解题思路
方法一:直接利用hashmap模拟即可

输出答案:3181
代码如下(示例):


import java.util.HashMap;public class B卡片 {/***用map记录卡片数量,每个数字拆开来减1*/public static void main(String[] args) {HashMap<Integer,Integer> map = new HashMap<>();map.put(0,2021);map.put(1,2021);map.put(2,2021);map.put(3,2021);map.put(4,2021);map.put(5,2021);map.put(6,2021);map.put(7,2021);map.put(8,2021);map.put(9,2021);int i=1;for (;; i++) {boolean flag = false;int num = i;while (true){int temp = num%10;if (map.get(temp)<=0){flag = true;break;}map.put(temp,map.get(temp)-1);num = num/10;if (num==0){break;}}if (flag)break;;}System.out.println(i-1);}
}

C. 直线

解题思路
方法一:两点确定一条直线,用直线确定方程的一般式子ax+by+c=0,求出所有的三元组(a,b,c),再去重

输出答案:40257


D. 货物摆放

解题思路
方法一:排列组合题,直接固定一个数,求另外两位数的组合即可
ps:
数据量大,数据类型用long

输出答案:2430


E. 路径

解题思路
方法一:用最小公倍数创建图的权值,再用floyd算法计算最短路径

输出答案:10266837
代码如下(示例):


public class E路径 {public static void main(String[] args) {int gragh[][] = new int[2050][2050];int n = 2021;for (int i = 1; i <= n; i++) {gragh[i][i] = 0;for (int j = i + 1; j <= i + 21; j++) {gragh[i][j] = gragh[j][i] = lcm(i, j);}}for (int k = 1; k <= n; k++) {for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {if (gragh[i][k] + gragh[k][j] < gragh[i][j]) {gragh[i][j] = gragh[i][k] + gragh[k][j];}}}}System.out.println(gragh[1][n]);}private static int lcm(int i, int j) {return i / gcd(i, j) * j;}private static int gcd(int i, int j) {return j == 0 ? i : gcd(j, i % j);}
}

F. 时间显示

解题思路
方法一:模拟法,去掉天,取余算出小时,分钟,和秒

代码如下(示例):

import java.util.Scanner;public class F时间显示 {/***模拟*/public static void main(String[] args) {Scanner sc = new Scanner(System.in);long n = sc.nextLong();n/=1000;int res = (int) (n % (24*60*60)); //最后一天int h = res/3600;res %= 3600;int m = res / 60;res%=60;System.out.println(h+":"+m+":"+res);//String.Format格式化一下就好}
}

G. 砝码称重

解题思路
方法一:这题是01背包的变形;


H. 杨辉三角形

解题思路
方法一:当时模拟杨辉三角形再暴力匹配的,思路代码都比较简单,但是只能骗点分…


I. 双向排序

解题思路
方法一:完全是暴力骗分了,直接用sort排序的,有更好的做法可以评论留言…



J. 括号序列

解题思路
方法一:dfs暴力骗分,枚举所有可能的结果,再判断是否可以通过插入最少个数得到,是的话就count++;最后的count即是答案
代码如下(示例):

import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;public class J括号序列 {/***dfs暴力骗分()()()这个set容器可以不需要,直接在dfs中计数,count设置为全局变量*/static Set<String> set = new HashSet<>();public static void main(String[] args) {Scanner sc = new Scanner(System.in);String s = sc.next();int left = 0;int right = 0;for (int i = 0; i < s.length(); i++) {if (s.charAt(i) == '(') {left++;} else {right++;}}//int count = Math.max(left, right);int count;//最多的括号数量int sub;//插入的括号不能超过sub个,也就是不一样的括号数量if (left > right) {count = left;sub = left - right;} else {count = right;sub = right - left;}String temp = "";for (int i = 0; i < count; i++) {temp += "()";}dfs(temp);System.out.println(set);int resCount = 0;for (String s1 : set) {int i = 0;int j = 0;boolean isMatch = true;while (i < s.length() && j < s1.length()) {int tempCount = sub;if (s.charAt(i) == s1.charAt(j)) {i++;j++;} else {j++;tempCount--;}if (tempCount < 0) {isMatch = false;break;}}if (isMatch) {resCount++;}}System.out.println(resCount);}private static void dfs(String temp) {set.add(temp);for (int i = 0; i < temp.length() - 1; i++) {if (temp.charAt(i) == ')' && temp.charAt(i + 1) == '(') {String temps = temp.substring(0, i) + "()" + temp.substring(i + 2, temp.length());dfs(temps);}}}
}

总结

要想更好的提升算法能力,归根结底还是要多刷题,分类刷题
如果大家有更好的思路和解法,希望能评论区分享一波

更多推荐

2021 第十二届 蓝桥杯省赛第一场 JAVA 大学 B 组

本文发布于:2024-03-23 21:31:59,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1743074.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:第一场   十二届   大学   JAVA   蓝桥杯省赛

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!