锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

蓝桥杯真题2017-2021

时间:2023-05-17 11:07:00 sb560f二极管sb510二极管二三极管0t1n5820二三极管

刷完这几年的真题,感觉理解了之后,拿奖问题不大。这次我获得了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所示。

img

小明很淘气,他只喜欢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百科大全!
          

相关文章