蓝桥杯真题2017-2021
时间:2023-05-17 11:07:00
刷完这几年的真题,感觉理解了之后,拿奖问题不大。这次我获得了2022年蓝桥杯javaB组省一,以下是历年javaB组织省赛题目。
文章目录
-
- 2017年真题
-
- 一、购物单
- 二、纸牌三角形
- 三、承压计算
- 四、魔方状态
- 五、取数位
- 六、最大公共子串
- 七、日期问题
- 八、包子凑数
- 九、分巧克力
- 十、k倍区间
- 小结
- 2018年真题
-
- 一、第几天
- 二、方格计数
- 三、复数幂
- 四、测试次数
- 九、全球变暖
- 十、堆计数
- 2019年真题
-
- 01-试题 A: 组队
- 02-试题 B: 不同子串
- 03-试题 C: 数列求值
- 04-试题 D: 数的分解
- 05-试题 E: 迷宫
- 06-试题 F: 特别数的和
- 07-试题 G: 外卖店优先级
- 08-试题 H: 人物相关性分析
- 09-试题 I: 后缀表达式
- 10-试题 J: 灵能传输
- 2020年第二次真题
-
- 一、试题 A: 门牌制作-答案:641
- 二、试题 B: 寻找 2020——答案:16520
- 三、试题 C: 蛇形填数-答案:761
- 四、试题 D: 七段码-答案:80
- 五、试题 E: 排序——jonmlkihgfedcba
- 六、试题 F: 成绩分析
- 7单词分析
- 八、试题 H: 数字三角形3
- 九、试题 I: 子串分值和
- 2021年真题
-
- 试题A:ASC
- Q2卡片
- q3直线
- q4货物摆放
- Q5路径
- q6时间显示
- q7最小砝码
- q8杨辉三角
- q9双向排序
- q10括号序列
- q7最小砝码
- q8杨辉三角
- q9双向排序
- q10括号序列
2017年真题
一、购物单
标题: 购物单 小明刚找到工作,老板很好,但老板的妻子喜欢购物。老板忙的时候,经常让小明帮忙去商场购物。小明很无聊,但很难拒绝。 这不,XX大促销又来了!老板夫人开了长长的购物单,都有折扣。 小明也有怪癖,不到万不得已,从不刷卡,直接用现金搞定。 现在小明很难过。请帮他计算一下这次购物需要从取款机上取多少现金。 取款机只能提供面额100元的纸币。小明想尽量少拿点现金,够了。 你的任务是计算小明至少需要多少现金。 以下是令人头疼的购物清单。为了保护隐私,物品名称被隐藏。 ----------------- **** 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折 -------------------- 需要注意的是,八八折是指按价格的88%计算,八折是按80%计算,其余类推。 特别是半价按50%计算。 特别是半价按50%计算。 请提交小明从取款机上提取的金额,单位为元。 答案是一个整数,类似于4300,结局必须是00,不要填写任何额外的内容。 特别提醒:不要携带计算器进入,也不要打开手机。
使用excel进行计算!
5200
二、纸牌三角形
标题:纸牌三角形
A,二、四、五、六、七、八 9张纸牌排成正三角形(A按1计算)。要求每个边的和等。
下图是一种排法(如有对齐问题,请参阅p1.png)。
p1.png
A
9 6
4 8
3 7 5 2
可能有很多这样的排法。
假如考虑旋转、镜像后相同的算同一种,一共有多少种不同的排法?
请计算并提交数字。
注:需要提交的是整数,不要提交任何多余的内容。
解题思路:
全排列 条件判断 去重
因为排法形成的正三角形可以旋转和镜像
首先,一个三角形有三个旋转,每个旋转有两个镜像,所以一个情况有六个重复!
最后ans/6
package q2017; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; public class q2纸牌三角形 {
static int[] a={
1,2,3,4,5,6,7,8,9}; static int cnt; static Map<Integer,Integer> map=new HashMap<>(); public static void main(String[] args) {
f(a,0); System.out.println(cnt/6); } public static void f(int []a,int k){
if (k==a.length){
int x=a[0]+a[1]+a[3]+a[5]; int y=a[0]+a[2]+a[4]+a[8]; int z=a[5]+a[6]+a[7]+a[8]; if (x==y&&y==z){
// if (map.get(x)==null){
// map.put(x,1); // cnt++; // } cnt++; } } for(int i=k;i<a.length;i++){
int t=a[i]; a[i]=a[k]; a[k]=t; f(a,k+1); t=a[i]; a[i]=a[k]; a[k]=t; } } }
三、承压计算
标题:承压计算
X星球的高科技实验室中整齐地堆放着某批珍贵金属原料。
每块金属原料的外形、尺寸完全一致,但重量不同。
金属材料被严格地堆放成金字塔形。
7
5 8
7 8 8
9 2 7 2
8 1 4 9 1
8 1 8 8 4 1
7 9 6 1 4 5 4
5 6 5 5 6 9 5 6
5 5 4 7 9 3 5 5 1
7 5 7 9 7 4 7 3 3 1
4 6 4 5 5 8 8 3 2 4 3
1 1 3 3 1 6 6 5 5 4 4 2
9 9 9 2 1 9 1 9 2 9 5 7 9
4 3 3 7 7 9 3 6 1 3 8 8 3 7
3 6 8 1 5 3 9 5 8 3 8 1 8 3 3
8 3 2 3 3 5 5 8 5 4 2 8 6 7 6 9
8 1 8 1 8 4 6 2 2 1 7 9 4 2 3 3 4
2 8 4 2 2 9 9 2 8 3 4 9 6 3 9 4 6 9
7 9 7 4 9 7 6 6 2 8 9 4 1 8 1 7 2 1 6
9 2 8 6 4 2 7 9 5 4 1 2 5 1 7 3 9 8 3 3
5 2 1 6 7 9 3 2 8 9 5 5 6 6 6 2 1 8 7 9 9
6 7 1 8 8 7 5 3 6 5 4 7 3 4 6 7 8 1 3 2 7 4
2 2 6 3 5 3 4 9 2 4 5 7 6 6 3 2 7 2 4 8 5 5 4
7 4 4 5 8 3 3 8 1 8 6 3 2 1 6 2 6 4 6 3 8 2 9 6
1 2 4 1 3 3 5 3 4 9 6 3 8 6 5 9 1 5 3 2 6 8 8 5 3
2 2 7 9 3 3 2 8 6 9 8 4 4 9 5 8 2 6 3 4 8 4 9 3 8 8
7 7 7 9 7 5 2 7 9 2 5 1 9 2 6 5 3 9 3 5 7 3 5 4 2 8 9
7 7 6 6 8 7 5 5 8 2 4 7 7 4 7 2 6 9 2 1 8 2 9 8 5 7 3 6
5 9 4 5 5 7 5 5 6 3 5 3 9 5 8 9 5 4 1 2 6 1 4 3 5 3 2 4 1
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
其中的数字代表金属块的重量(计量单位较大)。
最下一层的X代表30台极高精度的电子秤。
假设每块原料的重量都十分精确地平均落在下方的两个金属块上,
最后,所有的金属块的重量都严格精确地平分落在最底层的电子秤上。
电子秤的计量单位很小,所以显示的数字很大。
工作人员发现,其中读数最小的电子秤的示数为:2086458231
请你推算出:读数最大的电子秤的示数为多少?
注意:需要提交的是一个整数,不要填写任何多余的内容。
package q2017;
import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Scanner;
/* 7 5 8 7 8 8 9 2 7 2 8 1 4 9 1 8 1 8 8 4 1 7 9 6 1 4 5 4 5 6 5 5 6 9 5 6 5 5 4 7 9 3 5 5 1 7 5 7 9 7 4 7 3 3 1 4 6 4 5 5 8 8 3 2 4 3 1 1 3 3 1 6 6 5 5 4 4 2 9 9 9 2 1 9 1 9 2 9 5 7 9 4 3 3 7 7 9 3 6 1 3 8 8 3 7 3 6 8 1 5 3 9 5 8 3 8 1 8 3 3 8 3 2 3 3 5 5 8 5 4 2 8 6 7 6 9 8 1 8 1 8 4 6 2 2 1 7 9 4 2 3 3 4 2 8 4 2 2 9 9 2 8 3 4 9 6 3 9 4 6 9 7 9 7 4 9 7 6 6 2 8 9 4 1 8 1 7 2 1 6 9 2 8 6 4 2 7 9 5 4 1 2 5 1 7 3 9 8 3 3 5 2 1 6 7 9 3 2 8 9 5 5 6 6 6 2 1 8 7 9 9 6 7 1 8 8 7 5 3 6 5 4 7 3 4 6 7 8 1 3 2 7 4 2 2 6 3 5 3 4 9 2 4 5 7 6 6 3 2 7 2 4 8 5 5 4 7 4 4 5 8 3 3 8 1 8 6 3 2 1 6 2 6 4 6 3 8 2 9 6 1 2 4 1 3 3 5 3 4 9 6 3 8 6 5 9 1 5 3 2 6 8 8 5 3 2 2 7 9 3 3 2 8 6 9 8 4 4 9 5 8 2 6 3 4 8 4 9 3 8 8 7 7 7 9 7 5 2 7 9 2 5 1 9 2 6 5 3 9 3 5 7 3 5 4 2 8 9 7 7 6 6 8 7 5 5 8 2 4 7 7 4 7 2 6 9 2 1 8 2 9 8 5 7 3 6 5 9 4 5 5 7 5 5 6 3 5 3 9 5 8 9 5 4 1 2 6 1 4 3 5 3 2 4 1 */
public class q3承压计算 {
//1、怎么接收上面的数字 》》》二维数组!!
//2、自上而下处理a[i][j]*factor (2的30次方)===》除以二 计入a[i+1][j] 和a[i+!][j+1]
//循环处理2-N-1行
//对a[n-1]这一行进行排序,查看最小值于factor之间的倍数关系,决定最大值是多少
static long[][]a=new long[30][30];//long int放不下
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
long factor=1;//2的30次方
for (int i = 0; i < 30; ++i) {
factor<<=1;//!!amazing左移?右移 1073741824 ==factor*2
}
for (int i=0;i<29;i++){
//只有29行
for (int j=0;j<=i;j++){
//(int j=0;j<28;j++)不对,j<=i为什么!?
a[i][j]=sc.nextLong()*factor;
// a[i][j]=sc.nextLong();
}
}
//第二步
for(int i=0;i<29;i++){
//元数据只有29行
for (int j=0;j<=i;j++){
long temp = a[i][j] / 2;
a[i+1][j]+=temp;
a[i+1][j+1]+=temp;
}
}
// for (long[] longs : a) {
// for (long aLong : longs) {
// System.out.print(aLong+" ");
// }
// System.out.println();
// }
/* 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 8 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 2 7 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 1 4 9 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 1 8 8 4 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 9 6 1 4 5 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 6 5 5 6 9 5 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 5 4 7 9 3 5 5 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 5 7 9 7 4 7 3 3 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 6 4 5 5 8 8 3 2 4 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 3 3 1 6 6 5 5 4 4 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 9 9 2 1 9 1 9 2 9 5 7 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 3 3 7 7 9 3 6 1 3 8 8 3 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 6 8 1 5 3 9 5 8 3 8 1 8 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 3 2 3 3 5 5 8 5 4 2 8 6 7 6 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 1 8 1 8 4 6 2 2 1 7 9 4 2 3 3 4 0 0 0 0 0 0 0 0 0 0 0 0 0 2 8 4 2 2 9 9 2 8 3 4 9 6 3 9 4 6 9 0 0 0 0 0 0 0 0 0 0 0 0 7 9 7 4 9 7 6 6 2 8 9 4 1 8 1 7 2 1 6 0 0 0 0 0 0 0 0 0 0 0 9 2 8 6 4 2 7 9 5 4 1 2 5 1 7 3 9 8 3 3 0 0 0 0 0 0 0 0 0 0 5 2 1 6 7 9 3 2 8 9 5 5 6 6 6 2 1 8 7 9 9 0 0 0 0 0 0 0 0 0 6 7 1 8 8 7 5 3 6 5 4 7 3 4 6 7 8 1 3 2 7 4 0 0 0 0 0 0 0 0 2 2 6 3 5 3 4 9 2 4 5 7 6 6 3 2 7 2 4 8 5 5 4 0 0 0 0 0 0 0 7 4 4 5 8 3 3 8 1 8 6 3 2 1 6 2 6 4 6 3 8 2 9 6 0 0 0 0 0 0 1 2 4 1 3 3 5 3 4 9 6 3 8 6 5 9 1 5 3 2 6 8 8 5 3 0 0 0 0 0 2 2 7 9 3 3 2 8 6 9 8 4 4 9 5 8 2 6 3 4 8 4 9 3 8 8 0 0 0 0 7 7 7 9 7 5 2 7 9 2 5 1 9 2 6 5 3 9 3 5 7 3 5 4 2 8 9 0 0 0 7 7 6 6 8 7 5 5 8 2 4 7 7 4 7 2 6 9 2 1 8 2 9 8 5 7 3 6 0 0 5 9 4 5 5 7 5 5 6 3 5 3 9 5 8 9 5 4 1 2 6 1 4 3 5 3 2 4 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 */
//对30行的数据进行排序,查看最小值于factor之间的关系,决定最大值是多少
System.out.println(factor);
Arrays.sort(a[29]);
System.out.println(a[29][0]/2086458231);
System.out.println(a[29][29]);
System.out.println(a[29][29]/(a[29][0]/2086458231));
}
}
四、魔方状态
标题:魔方状态
二阶魔方就是只有2层的魔方,只由8个小块组成。
如图p1.png所示。
小明很淘气,他只喜欢3种颜色,所有把家里的二阶魔方重新涂了颜色,如下:
前面:橙色
右面:绿色
上面:黄色
左面:绿色
下面:橙色
后面:黄色
请你计算一下,这样的魔方被打乱后,一共有多少种不同的状态。
如果两个状态经过魔方的整体旋转后,各个面的颜色都一致,则认为是同一状态。
请提交表示状态数的整数,不要填写任何多余内容或说明文字。
bfs宽搜
模拟+去重+状态转移!
魔方的状态怎么保存?
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tbkKskxU-1651583658468)(蓝桥杯真题2017-2021Img/image-20220403111715555.png)]
这题有点恶心,把8个块记录为一个数组,每个块有6个面,所以块也是个数组,所以开个二维数组模拟,每次操作有3种,向前顺时针,向上顺时针 ,向左顺时针,hhha,看的有点迷惑了把,不知道大家有没发现玩魔方的大佬玩魔方的时候,只对一个角只往3个方向旋转呢,没错,我们就用bfs记录下所有的状态,大概的思路是这样的= =
import java.util.HashSet; import java.util.Set; /* 标题:魔方状态 二阶魔方就是只有2层的魔方,只由8个小块组成。 如图p1.png所示。 小明很淘气,他只喜欢3种颜色,所有把家里的二阶魔方重新涂了颜色,如下: 前面:橙色 右面:绿色 上面:黄色 左面:绿色 下面:橙色 后面:黄色 请你计算一下,这样的魔方被打乱后,一共有多少种不同的状态。 如果两个状态经过魔方的整体旋转后,各个面的颜色都一致,则认为是同一状态。 请提交表示状态数的整数,不要填写任何多余内容或说明文字。 */ public class _03魔方状态 { static char[][] start = { "oybbgb".toCharArray(), "oygbbb".toCharArray(), "bygbby".toCharArray(), "bybbgy".toCharArray(), "obbogb".toCharArray(), "obgobb".toCharArray(), "bbgoby".toCharArray(), "bbbogy".toCharArray()}; static char[][][] q = new char[2000000][8][6]; static Set<String> all_state = new HashSet<String>(); static int front, tail; static String to_string(char[][] a) { String ans = ""; for (int i = 0; i < 8; ++i) { ans += new String(a[i]); } return ans; } private static void swap(char[] a, int i, int j) { char t = a[i]; a[i] = a[j]; a[j] = t; } private static void swap(char[][] a, int i, int j) { char[] t = a[i]; a[i] = a[j]; a[j] = t; } //上层的块的旋转,面的相对位置调换 static void ucell(char[] a) { swap(a, 0, 2); swap(a, 2, 5); swap(a, 5, 4); } //上层顺时针旋转 static void u(char[][] s) { ucell(s[0]); ucell(s[1]); ucell(s[2]); ucell(s[3]); // 块的相对位置调换 swap(s, 1, 0); swap(s, 2, 1); swap(s, 3, 2); } //右层旋转是面的位置变化 static void rcell(char[] a) { swap(a, 1, 0); swap(a, 0, 3); swap(a, 3, 5); } static void r(char[][] s)//魔方右层顺时针转 { rcell(s[1]); rcell(s[2]); rcell(s[6]); rcell(s[5]); // 块的位置变化 swap(s, 2, 1); swap(s, 5, 1); swap(s, 6, 5); } static void fcell(char[] a) { swap(a, 2, 1); swap(a, 1, 4); swap(a, 4, 3); } static void f(char[][] s)//前面一层 顺时针转 { fcell(s[0]); fcell(s[1]); fcell(s[4]); fcell(s[5]); swap(s, 1, 5); swap(s, 0, 1); swap(s, 4, 0); } static void uwhole(char[][] s)//整个魔方从顶部看 顺时针转 用于判重 { u(s);//上层旋转 // 下层旋转 ucell(s[4]); ucell(s[5]); ucell(s[6]); ucell(s[7]); // 完成自旋后,块的位置变动 swap(s, 5, 4); swap(s, 6, 5); swap(s, 7, 6); } static void fwhole(char[][] s)//整个魔方从前面看 顺时针转 用于判重 { f(s); fcell(s[2]); fcell(s[6]); fcell(s[7]); fcell(s[3]); swap(s, 2, 6); swap(s, 3, 2); swap(s, 7, 3); } static void rwhole(char[][] s)//整个魔方从右边看 顺时针转 用于判重 { r(s); rcell(s[0]); rcell(s[3]); rcell(s[4]); rcell(s[7]); swap(s, 3, 7); swap(s, 0, 3); swap元器件数据手册
、IC替代型号,打造电子元器件IC百科大全!