2017年 第八届蓝桥杯 Java B组真题整理

1.购物单

小明刚刚找到工作,老板人很好,只是老板夫人很爱购物。老板忙的时候经常让小明帮忙到商场代为购物。小明很厌烦,但又不好推辞。这不,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折指的是按标价的88%计算,而8折是按80%计算,余者类推。
特别地,半价是按50%计算。
请提交小明要从取款机上提取的金额,单位是元。
答案是一个整数,类似4300的样子,结尾必然是00,不要填写任何多余的内容。
特别提醒:不许携带计算器入场,也不能打开手机。

题目分析

  • 相加

题目代码

    public class Main {public static void main(String[] args) {double s=180.90  *0.88+     10.25*0.65+ 56.14   *0.9+    104.65      *0.9+   100.30*0.88+  297.15        *0.5+  26.75       *0.65+130.62        *0.5+   240.28       *0.58+  270.62        *0.8+ 115.87       *0.88+247.34      *0.95+      73.21      *0.9+    101.00        *0.5+    79.54        *0.5+  278.44        *0.7+ 199.26       *0.5 + 12.97       *0.9+     166.30       *0.78+    125.50       *0.58+    84.98        *0.9+  113.35       *0.68+ 166.57        *0.5+ 42.56        *0.9+      81.90       *0.95+    131.78        *0.8+   255.89       *0.78+  109.17        *0.9+ 146.69       *0.68+ 139.33       *0.65+     141.16       *0.78+    154.74        *0.8+    59.42        *0.8+   85.44       *0.68+ 293.70       *0.88+     261.79       *0.65+     11.30       *0.88+   268.27       *0.58+  128.29       *0.88+ 251.03        *0.8+208.39       *0.75+     128.88       *0.75+     62.06        *0.9+   225.87       *0.75+   12.89       *0.75+  34.28       *0.75+ 62.16       *0.58+     129.12        *0.5+    218.37        *0.5+   289.69        *0.8;System.out.println(s);}}

答案

5200

2.纸牌三角形

  A,2,3,4,5,6,7,8,9 共9张纸牌排成一个正三角形(A按1计算)。要求每个边的和相等。下图就是一种排法(如有对齐问题,参看p1.png)。A9 64   83 7 5 2这样的排法可能会有很多。如果考虑旋转、镜像后相同的算同一种,一共有多少种不同的排法呢?请你计算并提交该数字。注意:需要提交的是一个整数,不要提交任何多余内容。

题目解析

  • 穷举即可,需要注意的是考虑旋转、镜像后相同的算同一种,顶点可以有三个位置,并且左右对称的话也是相同的一种,因此最后要除以6.

题目代码

  public class Main {public static void main(String[] args) {int a, b, c, d, e, f, g, h, i;int sum = 0;for (a = 1; a < 10; a++) {for (b = 1; b < 10; b++) {for (c = 1; c < 10; c++) {for (d = 1; d < 10; d++) {for (e = 1; e < 10; e++) {for (f = 1; f < 10; f++) {for (g = 1; g < 10; g++) {for (h = 1; h < 10; h++) {for (i = 1; i < 10; i++) {if (a + b + d + f == a + c + e + i&& a + b + d + f == f + g+ h + i && a != b&& a != c && a != d&& a != e && a != f&& a != g && a != h&& a != i && b != c&& b != d && b != e&& b != f && b != g&& b != h && b != i&& c != d && c != e&& c != f && c != g&& c != h && c != i&& d != e && d != f&& d != g && d != h&& d != i && e != f&& e != g && e != h&& e != i && f != g&& f != h && f != i&& g != h && g != i&& h != i) {sum++;}}}}}}}}}}System.out.println(sum/3/2);}}

3.承压计算

X星球的高科技实验室中整齐地堆放着某批珍贵金属原料。每块金属原料的外形、尺寸完全一致,但重量不同。
金属材料被严格地堆放成金字塔形。75 87 8 89 2 7 28 1 4 9 18 1 8 8 4 17 9 6 1 4 5 45 6 5 5 6 9 5 65 5 4 7 9 3 5 5 17 5 7 9 7 4 7 3 3 14 6 4 5 5 8 8 3 2 4 31 1 3 3 1 6 6 5 5 4 4 29 9 9 2 1 9 1 9 2 9 5 7 94 3 3 7 7 9 3 6 1 3 8 8 3 73 6 8 1 5 3 9 5 8 3 8 1 8 3 38 3 2 3 3 5 5 8 5 4 2 8 6 7 6 98 1 8 1 8 4 6 2 2 1 7 9 4 2 3 3 42 8 4 2 2 9 9 2 8 3 4 9 6 3 9 4 6 97 9 7 4 9 7 6 6 2 8 9 4 1 8 1 7 2 1 69 2 8 6 4 2 7 9 5 4 1 2 5 1 7 3 9 8 3 35 2 1 6 7 9 3 2 8 9 5 5 6 6 6 2 1 8 7 9 96 7 1 8 8 7 5 3 6 5 4 7 3 4 6 7 8 1 3 2 7 42 2 6 3 5 3 4 9 2 4 5 7 6 6 3 2 7 2 4 8 5 5 47 4 4 5 8 3 3 8 1 8 6 3 2 1 6 2 6 4 6 3 8 2 9 61 2 4 1 3 3 5 3 4 9 6 3 8 6 5 9 1 5 3 2 6 8 8 5 32 2 7 9 3 3 2 8 6 9 8 4 4 9 5 8 2 6 3 4 8 4 9 3 8 87 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 97 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 65 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请你推算出:读数最大的电子秤的示数为多少?注意:需要提交的是一个整数,不要填写任何多余的内容。

题目分析

  • 将所有的数存在一个二维数组a[i][j]中,可以得到:

    if(j!=0){
    a[i][j] = a[i-1][j-1]/2.0+ a[i-1][j]/2.0+a[i][j];
    }else{
    a[i][j] = a[i-1][j]/2.0+a[i][j];
    }

  • 最后用题目中所给的数除以最小值求出单价重再乘以数组中的最大值得到最大重量。

题目代码

    import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);double[][] a = new double[30][30];double min = 1000000;double max = 0;for(int i=0;i<29;i++){for(int j=0;j<=i;j++){a[i][j]=sc.nextDouble();}}for(int i=1;i<30;i++){for(int j=0;j<=i;j++){if(j!=0)a[i][j] = a[i-1][j-1]/2.0+ a[i-1][j]/2.0+a[i][j];elsea[i][j] = a[i-1][j]/2.0+a[i][j];}}for(int i=0;i<30;i++){max = Math.max(max, a[29][i]);min = Math.min(min, a[29][i]);}System.out.println(max);System.out.println(min);System.out.println((long)(2086458231*max/min));}}

4.魔方状态

二阶魔方就是只有2层的魔方,只由8个小块组成。 如图所示。小明很淘气,他只喜欢3种颜色,所有把家里的二阶魔方重新涂了颜色,如下:前面:橙色
右面:绿色
上面:黄色
左面:绿色
下面:橙色
后面:黄色请你计算一下,这样的魔方被打乱后,一共有多少种不同的状态。如果两个状态经过魔方的整体旋转后,各个面的颜色都一致,则认为是同一状态。请提交表示状态数的整数,不要填写任何多余内容或说明文字。

【答案】:229878
参考链接:
版权声明:本文为CSDN博主「豌豆苞谷」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_35222235/article/details/79725363

5.取数位

求1个整数的第k位数字有很多种方法。以下的方法就是一种。对于题目中的测试数据,应该打印5。public class Main
{undefinedstatic int len(int x){undefinedif(x<10) return 1;return len(x/10)+1;}// 取x的第k位数字static int f(int x, int k){undefinedif(len(x)-k==0)return x%10;return __________;  //填空}public static void main(String[] args){undefinedint x = 23513;//System.out.println(len(x));System.out.println(f(x,3));}
}请仔细分析源码,并补充划线部分所缺少的代码。注意:只提交缺失的代码,不要填写任何已有内容或说明性的文字。。

题目代码

f(x/10,k)

6.最大公共子串

最大公共子串长度问题就是:
求两个串的所有子串中能够匹配上的最大长度是多少。比如:"abcdkkk" 和 "baabcdadabc",
可以找到的最长的公共子串是"abcd",所以最大公共子串长度为4。
public class Main
{undefinedstatic int f(String s1, String s2){undefinedchar[] c1 = s1.toCharArray();char[] c2 = s2.toCharArray();int[][] a = new int[c1.length+1][c2.length+1];int max = 0;for(int i=1; i<a.length; i++){undefinedfor(int j=1; j<a[i].length; j++){undefinedif(c1[i-1]==c2[j-1]) {undefined__________________;  //填空if(a[i][j] > max) max = a[i][j];}}}return max;}public static void main(String[] args){undefinedint n = f("abcdkkk", "baabcdadabc");System.out.println(n);}
}
【答案】: a[i][j]=a[i-1][j-1]+1

7.日期问题

小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在1960年1月1日至2059年12月31日。令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的,有采用月/日/年的,还有采用日/月/年的。更加麻烦的是,年份也都省略了前两位,使得文献上的一个日期,存在很多可能的日期与其对应。  比如02/03/04,可能是2002年03月04日、2004年02月03日或2004年03月02日。  给出一个文献上的日期,你能帮助小明判断有哪些可能的日期对其对应吗?
输入
----
一个日期,格式是"AA/BB/CC"。  (0 <= A, B, C <= 9)  输出
----
输出若干个不相同的日期,每个日期一行,格式是"yyyy-MM-dd"。多个日期按从早到晚排列。  样例输入
----
02/03/04  样例输出
----
2002-03-04
2004-02-03
2004-03-02  资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗  < 1000ms

题目分析

  • 使用TreeSet来自动排序和去重
  • 考虑润年和平年
  • 考虑是否大于59
  • 考虑月份不能超过12,天数不能超过28/29 - 30/31

题目代码

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.TreeSet;public class Main {public static TreeSet<Integer>  set = new TreeSet<Integer>();  public static List<Integer> list =new ArrayList<Integer>();  public static void f(String year,String mon,String day)  {  int y = Integer.parseInt(year);  int m = Integer.parseInt(mon);  int d = Integer.parseInt(day);  if(y<=59)  {  y+=2000;  }else {  y+=1900;  }  if(((y%4==0&&y%100!=0)||y%400==0) && m==2 && d>0 && d<=29)  {  set.add(Integer.parseInt(""+y+mon+day));  }  if(y%4!=0 && m==2 && d>0 &&d<=28)  {  set.add(Integer.parseInt(""+y+mon+day));  }  if((m==1||m==3||m==5||m==7||m==8||m==10||m==12) && d>0 && d<=31)  {  set.add(Integer.parseInt(""+y+mon+day));  }  if((m==4|| m==6|| m==9|| m==11) && d>0&&d<=30)  {  set.add(Integer.parseInt(""+y+mon+day));  }  }  public static void main(String[] args) {  Scanner in = new Scanner(System.in);  String str = in.nextLine();  String[] s =str.split("/");  f(s[0],s[1],s[2]);  f(s[2],s[0],s[1]);  f(s[2],s[1],s[0]);  list.addAll(set);  for(int i=0;i<list.size();i++)  {  String ans = ""+list.get(i);  System.out.println(ans.substring(0, 4)+"-"+ans.substring(4,6)+"-"+ans.substring(6,8));  }  } }

8.包子凑数

小明几乎每天早晨都会在一家包子铺吃早餐。他发现这家包子铺有N种蒸笼,其中第i种蒸笼恰好能放Ai个包子。每种蒸笼都有非常多笼,可以认为是无限笼。每当有顾客想买X个包子,卖包子的大叔就会迅速选出若干笼包子来,使得这若干笼中恰好一共有X个包子。比如一共有3种蒸笼,分别能放3、4和5个包子。当顾客想买11个包子时,大叔就会选2笼3个的再加1笼5个的(也可能选出1笼3个的再加2笼4个的)。当然有时包子大叔无论如何也凑不出顾客想买的数量。比如一共有3种蒸笼,分别能放4、5和6个包子。而顾客想买7个包子时,大叔就凑不出来了。小明想知道一共有多少种数目是包子大叔凑不出来的。输入
----
第一行包含一个整数N。(1 <= N <= 100)
以下N行每行包含一个整数Ai。(1 <= Ai <= 100)  输出
----
一个整数代表答案。如果凑不出的数目有无限多个,输出INF。例如,
输入:
2
4
5   程序应该输出:
6  再例如,
输入:
2
4
6    程序应该输出:
INF样例解释:
对于样例1,凑不出的数目包括:1, 2, 3, 6, 7, 11。
对于样例2,所有奇数都凑不出来,所以有无限多个。

题目解析
题目代码

import java.util.*;
public class P7157包子凑数 {/** 欧几里得扩展* ax+by = c  令 g = gcd(a,b) 如果c不是g的倍数 则方程无解* 所以如果g不等于1   绝对无数个c使得方程无解*/static int a[] = new int[10001];static int vis[] = new int[10010];static int n;static int gcd(int a,int b){return b==0? a:gcd(b,a%b);}public static void main(String[] args) {Scanner sc = new Scanner(System.in);n = sc.nextInt();for(int i = 0;i < n;i++){a[i] = sc.nextInt();vis[a[i]] = 1; // 这个数目可以表示}int g = a[0];for(int i = 1;i < n;i++)g = gcd(g,a[i]);if(g != 1){System.out.println("INF");return;}for(int i = 0;i < n;i++)for(int j = 0;j+a[i] < 10001;j++)if(vis[j] == 1) // 如果 j 是可以凑出来的  那么我已有的数组加j肯定能凑出来vis[a[i]+j] = 1;long ans = 0;for(int i = 1;i <= 10000;i++)if(vis[i] == 0)ans++;System.out.println(ans);}
}

9. 分巧克力

 儿童节那天有K位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。小明一共有N块巧克力,其中第i块是Hi x Wi的方格组成的长方形。为了公平起见,小明需要从这 N 块巧克力中切出K块巧克力分给小朋友们。切出的巧克力需要满足:1. 形状是正方形,边长是整数  2. 大小相同  例如一块6x5的巧克力可以切出6块2x2的巧克力或者2块3x3的巧克力。当然小朋友们都希望得到的巧克力尽可能大,你能帮小Hi计算出最大的边长是多少么?输入
第一行包含两个整数N和K。(1 <= N, K <= 100000)
以下N行每行包含两个整数Hi和Wi。(1 <= Hi, Wi <= 100000)
输入保证每位小朋友至少能获得一块1x1的巧克力。   输出
输出切出的正方形巧克力最大可能的边长。样例输入:
2 10
6 5
5 6  样例输出:
2资源约定:
峰值内存消耗(含虚拟机) < 256MCPU消耗  < 1000ms

10. k倍区间

给定一个长度为N的数列,A1, A2, ... AN,如果其中一段连续的子序列Ai, Ai+1, ... Aj(i <= j)之和是K的倍数,我们就称这个区间[i, j]是K倍区间。  你能求出数列中总共有多少个K倍区间吗?  输入
-----
第一行包含两个整数N和K。(1 <= N, K <= 100000)
以下N行每行包含一个整数Ai。(1 <= Ai <= 100000)  输出
-----
输出一个整数,代表K倍区间的数目。  例如,
输入:
5 2
1
2
3
4
5  程序应该输出:
6资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗  < 2000ms

题目解析
题目代码

参考自:https://blog.csdn.net/qq_34594236/article/details/70845223

2017年 第八届蓝桥杯 Java B组真题整理相关推荐

  1. java蓝桥杯凑算是,第七届蓝桥杯JAVA B组真题解析-凑算式(第三题)

    第七届蓝桥杯JAVA B组真题解析-凑算式(第三题) 凑算式 A+B/C+DEF/GHI =10 (如果显示有问题,可以参见[图1.jpg]) 这个算式中AI代表19的数字,不同的字母代表不同的数字. ...

  2. 第十三届蓝桥杯Java B组真题

    试题 A: 星期计算 本题总分:5 分 [问题描述] 已知今天是星期六,请问 2022 天后是星期几? 注意用数字 1 到 7 表示星期一到星期日. [答案提交] 这是一道结果填空的题,你只需要算出结 ...

  3. 第11届蓝桥杯 Java C 组真题 A:指数计算

    [问题描述] 7月1日是建党节,从1921年到2020年,中国共产党已经带领中国人民走过了99年. 请计算 mod 1921,其中A mod B 表示A除以B的余数. [答案提交] 这是一道结果填空题 ...

  4. 蓝桥杯2016c++A组真题代码第十题最大比例

    蓝桥杯2016c++A组真题&代码第十题最大比例 /* 最大比例X星球的某个大奖赛设了M级奖励.每个级别的奖金是一个正整数. 并且,相邻的两个级别间的比例是个固定值. 也就是说:所有级别的奖金 ...

  5. 2022年第十三届蓝桥杯大赛C组真题C/C++解析(上)

    **今天给大家带来2022年,第十三届蓝桥杯大赛的真题解析** 转眼间,距离考试已经过去很长时间了,今天解元给大家解析一下,有问题欢迎大家指点 :笑: 下面进入正题 前言 填空题 1.排列字母 2.特 ...

  6. 第九届蓝桥杯java B组—第二题方格计数(详细介绍)

    文章目录 1.题目如下 2.解题思路 3.详细讲解 4.代码实例 5.答案 最近正在练习蓝桥杯的习题,做到第九届篮球杯的第二题(方格计数)的时候,发现没有思路,就上网上查了一些资料,感觉说的不够详细, ...

  7. 【2020蓝桥杯】Python组真题解析 - 第十一届蓝桥杯

    本资料整理者&代码编写者:夏2同学 个人邮箱:1754082565@qq.com 请勿未经同意转载 & 如有错误,欢迎指正 资料下载:https://download.csdn.net ...

  8. 第八届蓝桥杯java b组第十题

    标题: k倍区间 给定一个长度为N的数列,A1, A2, ... AN,如果其中一段连续的子序列Ai, Ai+1, ... Aj(i <= j)之和是K的倍数,我们就称这个区间[i, j]是K倍 ...

  9. 第八届蓝桥杯Java A组决赛第一题

    标题:图书排列 将编号为1~10的10本书排放在书架上,要求编号相邻的书不能放在相邻的位置. 请计算一共有多少种不同的排列方案. 注意,需要提交的是一个整数,不要填写任何多余的内容. 答案:47930 ...

最新文章

  1. 一位83岁独立开发者教会我的道理
  2. 与Susan Fowler探讨生产就绪微服务之问答
  3. c语言在管理系统中的应用,C语言应用——学生管理系统的制作
  4. 最新综述:用于组合优化的强化学习
  5. Linux 用户管理命令笔记
  6. hdu4848 求到达每一个点总时间最短(sum[d[i]])。
  7. Kotlin入门(21)活动页面的跳转处理
  8. 【课程设计】图书管理系统 C语言版---操作系统版
  9. 安居客Android项目架构演进
  10. Redis常用命令总结,为什么阿里的程序员成长如此之快
  11. c语言中的布尔类型头文件,C语言的布尔类型(_Bool)
  12. MATLAB数字图像处理小系统 【带GUI界面,源码实现】
  13. arduino闪烁LED灯
  14. Navicat 快捷键查询
  15. 【文本分类】文本分类案例
  16. 【江苏大学研究生小记】各方面都不太如意
  17. 英语语法回顾4——定语和定语从句
  18. 期权基础篇 | 什么是期权
  19. 主攻“量子计算+元宇宙”:NTT DATA于六个国家设立创新中心
  20. FPGA Verilog AD7606驱动代码,包含SPI模式读取和并行模式读取两种

热门文章

  1. Encoded password does not look like BCrypt 异常问题
  2. python3强智教务系统个人课表爬虫
  3. 强智教务系统验证码识别 OpenCV
  4. simlink里面MATLAB Function ‘xxx‘ not supported for code generation.
  5. R3Det: Refined Single-Stage Detector with Feature Refinementfor Rotating Object论文学习
  6. windows桌面ui开发
  7. 2021CCPC网络预选赛(重赛)
  8. 第6周作业3-Fibonacci数列(网络131黄宇倩)
  9. 收入为什么增加记入贷方而不是借方--完美解答
  10. springboot文件上传 Required request part 'file' is not present