Java_B组2015年省赛真题

  • 01 三角形面积
  • 02 立方变自身
  • 03 三羊献瑞
  • 04 循环节长度
  • 05 九数组分数
  • 06 加法变乘数
  • 07 牌型种数
  • 08 饮料换购
  • 09 垒骰子
  • 10 生命之树

01 三角形面积

如图1所示。图中的所有小方格面积都是1。

那么,图中的三角形面积应该是多少呢?

请填写三角形的面积。不要填写任何多余内容或说明性文字。

  • 答案:28

02 立方变自身

观察下面的现象,某个数字的立方,按位累加仍然等于自身。
1^3 = 1
8^3 = 512 5+1+2=8
17^3 = 4913 4+9+1+3=17

请你计算包括1,8,17在内,符合这个性质的正整数一共有多少个?

请填写该数字,不要填写任何多余的内容或说明性的文字。

  • 答案:6
public class B_02立方变自身 {public static void main(String[] args) {int ans = 3;long i = 18;while(i < 100) {long num = i * i * i;if(check(num, i)) {System.out.println(i + "的3次方 = " + num);ans++;}i++;}System.out.println(ans);}private static boolean check(long num, long i) {long sum = 0;while(num != 0) {sum += num % 10;num /= 10;}if(sum == i)     return true;return false;}
}

03 三羊献瑞

观察下面的加法算式:

​ 祥 瑞 生 辉

+ 三 羊 献 瑞

____________________________________________

三 羊 生 瑞 气

其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。

请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。

  • 答案:1085

  • 读题观察:

    • 将汉字转换为 abcd + efgb = efcbh

    • 两个最大的数9+9得18,最多进一位,即说明 ”三“ = 1 即 e = 1;推测 祥 + 三 = 羊(a + e = f) 中 a = 9,f = 0;在 瑞 + 羊 = 生 中,必有低位来的进位(否则瑞 + 0 = 瑞),可得 b + 1 = c;生 + 献 = 瑞中有进位,即 c + g > 10

      此时有 三个已知、五个未知,只需对四个未知进行搜索(h位由 d 和 b可确定)。

// abcd + efgb = efcbh
public class B_03三羊献瑞 {public static void main(String[] args) {//    abcd //  + efgb// = efcbh 一共8个不同数字int e = 1, a = 9, f = 0;for(int d = 2; d < 9; d++) {  for(int b = 2; b < 9; b++) {  if(d == b)    continue;   // 数字不同int h = (d + b) % 10;if(h == d || h == d || h == e || h == a || h == f)  continue;int c = b + 1;if(c == d || c == d || c == a || c == h)  continue;for(int g = 2; g < 9; g++) {  if(g == d || g == b || g == h || g == c)    continue;if((c + g + ((d + b) / 10)) % 10 == b){System.out.println(e*1000 + g * 10 + b);break;}else {continue;}}}}}
}

04 循环节长度

两个整数做除法,有时会产生循环小数,其循环部分称为:循环节。
比如,11/13=6=>0.846153846153… 其循环节为[846153] 共有6位。
下面的方法,可以求出循环节的长度。

请仔细阅读代码,并填写划线部分缺少的代码。

public static int f(int n, int m)
{n = n % m;    Vector v = new Vector();for(;;){v.add(n);n *= 10;n = n % m;if(n==0) return 0;if(v.indexOf(n)>=0)  _________________________________ ;  //填空}
}

注意,只能填写缺少的部分,不要重复抄写已有代码。不要填写任何多余的文字。

  • 答案:

    return v.size() - v.indexOf(n);
    
  • 方法:需要注释掉填空行,运行代码观察v内元素的变化规律,当当前余数n在v中已经存在时,他们的间隔是循环小数的长度。

05 九数组分数

1,2,3…9 这九个数字组成一个分数,其值恰好为1/3,如何组法?

下面的程序实现了该功能,请填写划线部分缺失的代码。

public class A
{public static void test(int[] x){int a = x[0]*1000 + x[1]*100 + x[2]*10 + x[3];int b = x[4]*10000 + x[5]*1000 + x[6]*100 + x[7]*10 + x[8];        if(a*3==b) System.out.println(a + " " + b);}public static void f(int[] x, int k){if(k>=x.length){test(x);return;}for(int i=k; i<x.length; i++){int t=x[k]; x[k]=x[i]; x[i]=t;f(x,k+1);_______________________________________       // 填空}}public static void main(String[] args){int[] x = {1,2,3,4,5,6,7,8,9};        f(x,0);}
}

注意,只能填写缺少的部分,不要重复抄写已有代码。不要填写任何多余的文字。

  • 答案:

    t=x[k]; x[k]=x[i]; x[i]=t; // 进行还原回溯
    
  • 方法:

    参考2013年JavaB组省赛带分数题,使用的是 全排列递归深搜 方法。

06 加法变乘数

我们都知道:1+2+3+ … + 49 = 1225
现在要求你把其中 两个不相邻 的加号变成乘号,使得结果为2015

比如:
1+2+3+…+10*11+12+…+27*28+29+…+49 = 2015
就是符合要求的答案。

请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10)。

注意:需要你提交的是一个整数,不要填写任何多余的内容。

  • 答案:16
public class B_06加法变乘数 {public static void main(String[] args) {for(int i = 1; i < 47; i++) {for(int j = i + 2; j < 49; j++) {int ans = 0, k = 1;while(k <= 49) {if(k == i || k == j){ans += (k * (k + 1));k += 2;}else {ans += k++;}}if(ans == 2015)System.out.println(i + " " + j);}}}
}

或:

public class B_06加法变乘数 {public static void main(String[] args) { for(int i = 1; i < 47; i++) { // 第一个乘号的位置,只能到46,因为后面还有一个乘号且两个乘号不相邻for(int j = i + 2; j < 49; j++) {    // 第二个乘号位置if(i * (i + 1) - (i + i + 1) + j * (j + 1) - (j + j + 1) == (2015 - 1225))   // 用全部相加等于1225的式子和改变乘号结果为2015的式子作差System.out.println(i + " " + j);}}}
}

07 牌型种数

小明被劫持到X赌城,被迫与其他3人玩牌。
一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。
这时,小明脑子里突然冒出一个问题:
如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序,自己手里能拿到的初始牌型组合一共有多少种呢?

请填写该整数,不要填写任何多余的内容或说明文字。

  • 答案:3598180

  • 方法思路:

    13种牌,每一种能取0、1、2、3、4张;

    从1到13进行递归(层数13),每层进行拿牌操作,有五种可能;

    最后验证拿牌种数、拿牌数量是否符合要求。

public class B_07牌型种数 {private static int ans;public static void main(String[] args) {f(0, 0);System.out.println(ans);}public static void f(int k, int cnt) {if(k > 13 || cnt > 13)    return; // 分配不合法if(k == 13 && cnt == 13) {  // 分配结束、符合条件ans++;return;}for(int i = 0; i < 5; i++) {  // 每一种牌可以选0到4张f(k + 1, cnt + i);}}
}

08 饮料换购

乐羊羊饮料厂正在举办一次促销优惠活动。乐羊羊C型饮料,凭3个瓶盖可以再换一瓶C型饮料,并且可以一直循环下去,但不允许赊账。

请你计算一下,如果小明不浪费瓶盖,尽量地参加活动,那么,对于他初始买入的n瓶饮料,最后他一共能得到多少瓶饮料。

输入:一个整数n,表示开始购买的饮料数量(0<n<10000)
输出:一个整数,表示实际得到的饮料数

例如:
输入:
100
输出:
149

输入:
101
输出:
151

资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗 < 1000ms

请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。
注意:主类的名字必须是:Main,否则按无效代码处理。

  • 方法:模拟过程即可
import java.util.Scanner;public class B_08饮料换购 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int change = 0;int num = n;while (true) {change += num / 3;   // 每次可以兑换的瓶数,进行叠加num = num / 3 + num % 3; // 还能去兑换的数量为每轮新兑换的数量+旧的当中未使用的if(num < 3)    break;  // 若能去兑换的瓶数小于3,停止循环}System.out.println(change + n);}
}

09 垒骰子

赌圣atm晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体。

经过长期观察,atm 发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥!

我们先来规范一下骰子:1 的对面是 4,2 的对面是 5,3 的对面是 6。

假设有 m 组互斥现象,每组中的那两个数字的面紧贴在一起,骰子就不能稳定的垒起来。 atm想计算一下有多少种不同的可能的垒骰子方式。

两种垒骰子方式相同,当且仅当这两种方式中对应高度的骰子的对应数字的朝向都相同。

由于方案数可能过多,请输出模 10^9 + 7 的结果。

不要小看了 atm 的骰子数量哦~

「输入格式」
第一行两个整数 n m
n表示骰子数目
接下来 m 行,每行两个整数 a b ,表示 a 和 b 不能紧贴在一起。

「输出格式」
一行一个数,表示答案模 10^9 + 7 的结果。

「样例输入」
2 1
1 2

「样例输出」
544

「数据范围」
对于 30% 的数据:n <= 5
对于 60% 的数据:n <= 100
对于 100% 的数据:0 < n <= 10^9, m <= 36

资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗 < 2000ms

请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。
注意:主类的名字必须是:Main,否则按无效代码处理。

  • 方法一:递归(30分)

  • 方法二:递推、dp

  • 方法三:矩阵快速幂(100分)
import java.util.Scanner;public class B_09垒骰子 {private static final long MOD = 1000000007;private static int op[] = new int[7];    // 一个骰子中各面的相对面private static int n;private static int m;public static void main(String[] args) {init();Scanner sc = new Scanner(System.in);n = sc.nextInt();m = sc.nextInt();long[][] conflict = new long[6][6];    // 初始化冲突矩阵for(int i = 0; i < 6; i++) {for(int j = 0; j < 6; j++) {conflict[i][j] = 1; }}// 建立冲突矩阵for(int i = 0; i < m; i++) {int a = sc.nextInt();int b = sc.nextInt();conflict[op[a] - 1][b - 1] = 0;conflict[op[b] - 1][a - 1] = 0;}// 求冲突矩阵的n-1次方long[][] mPow_n_1  = mPow(conflict, n - 1);// 累加矩阵的每个元素long ans = 0;for(int i = 0; i < 6; i++) {for(int j = 0; j < 6; j++) {ans = (ans + mPow_n_1[i][j]) % MOD;}}// ans*4^nSystem.out.println(ans * power(4, n) % MOD); }// 计算指数幂private static long power(long i, int n) {long ans = 1;while(n != 0) {if((n & 1) == 1) ans = ((ans * i) % MOD);i = i * i % MOD;n >>= 1;}return ans;}// 矩阵的快速幂private static long[][] mPow(long[][] conflict, int n) {long[][] e = new long[6][6];for(int i = 0; i < 6; i++) {for(int j = 0; j < 6; j++) {if(i == j) e[i][j] = 1;else e[i][j] = 0;}}while(n != 0) {if((n & 1) == 1) {e = mMul(e, conflict);}conflict = mMul(conflict, conflict);n >>= 1;}return e;}// 矩阵乘法private static long[][] mMul(long[][] a, long[][] b) {long[][] ans = new long[6][6];for(int i = 0; i < 6; i++) {for(int j = 0; j < 6; j++) {for(int k = 0; k < 6; k++) {ans[i][j] = (ans[i][j] + a[i][k] * b[k][j]) % MOD; }}}return ans;}// 初始化骰子6个面中相对的面public static void init() {op[1] = 4;    op[4] = 1;op[2] = 5;  op[5] = 2;op[3] = 6;  op[6] = 3;}
}

10 生命之树

在X森林里,上帝创建了生命之树。

他给每棵树的每个节点(叶子也称为一个节点)上,都标了一个整数,代表这个点的和谐值。

上帝要在这棵树内选出一个非空节点集S,使得对于S中的任意两个点a,b,都存在一个点列 {a, v1, v2, …, vk, b} 使得这个点列中的每个点都是S里面的元素,且序列中相邻两个点间有一条边相连。

在这个前提下,上帝要使得S中的点所对应的整数的和尽量大。

经过atm的努力,他已经知道了上帝给每棵树上每个节点上的整数。但是由于 atm 不擅长计算,他不知道怎样有效的求评分。他需要你为他写一个程序来计算一棵树的分数。

「输入格式」
第一行一个整数 n 表示这棵树有 n 个节点。
第二行 n 个整数,依次表示每个节点的评分。
接下来 n-1 行,每行 2 个整数 u, v,表示存在一条 u 到 v 的边。由于这是一棵树,所以是不存在环的。

「输出格式」
输出一行一个数,表示上帝给这棵树的分数。

「样例输入」
5
1 -2 -3 4 5
4 2
3 1
1 2
2 5

「样例输出」
8

「数据范围」
对于 30% 的数据,n <= 10
对于 100% 的数据,0 < n <= 10^5, 每个节点的评分的绝对值不超过 10^6 。

资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗 < 3000ms

请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。
注意:主类的名字必须是:Main,否则按无效代码处理。

  • 方法一:暴力枚举子集,dfs探测是否连通(30分)

【蓝桥杯】Java_B组2015年省赛真题相关推荐

  1. 第九届蓝桥杯JavaA组(2018年)省赛真题解析

    第九届蓝桥杯JavaA组(2018年)省赛真题解析 1.分数 1/1+1/2+1/4+1/8+1/16+- 每项是前一项的一半,如果一共有20项,求这个和是多少 结果用分数表示,类似: 3/2,当然这 ...

  2. 【蓝桥杯】Java_B组2017年省赛真题

    Java_B组2017年省赛真题 01 购物单 02 纸牌三角形 03 承压计算 04 魔方状态 05 取数位 06 最大公共子串 07 日期问题 08 包子凑数 09 分巧克力 10 k倍区间 01 ...

  3. 蓝桥杯嵌入式第十届省赛真题

    蓝桥杯嵌入式第十届省赛真题 文章目录 蓝桥杯嵌入式第十届省赛真题 1.题目分析 2.项目结构 2.1数组思路 2.2Key_Flag控制对应逻辑 2.3KEY控制操作 1.题目分析 总的来说这题考点特 ...

  4. 【蓝桥杯单片机第十二届国赛真题】

    [蓝桥杯单片机第十二届国赛真题] 文章目录 [蓝桥杯单片机第十二届国赛真题] 前言 一.真题 二.源码 前言 有幸进入国赛,为自己大学最后一个比赛画上完满的句号^@^ 下面为蓝桥杯单片机第十二届国赛程 ...

  5. 2020年第十一届蓝桥杯JavaC组(十月场)真题解析

    相关题目: 2016年第七届蓝桥杯真题解析JavaB组 2016年第七届蓝桥杯真题解析JavaC组 2017年第八届蓝桥杯真题解析JavaB组 2017年第八届蓝桥杯真题解析JavaC组 2018年第 ...

  6. 蓝桥杯嵌入式STM32G431——第九届省赛真题电子定时器

    第九届省赛真题电子定时器 第九届省赛真题 主函数代码(不包含各模块初始化代码) 按键模块与LCD模块的逻辑图(仅供参考) 第九届省赛真题 主函数代码(不包含各模块初始化代码) #include &qu ...

  7. [蓝桥杯]2018年第九届省赛真题C/C++ B组 填空+大题

    第九届蓝桥杯省赛题目 填空A:第几天 填空B:明码 填空C:乘积尾零 填空 D: 测试次数(待学习) 填空 E:快速排序 大题F:递增三元组 大题G: 螺旋折线 大题H:日志统计 大题I-全球变暖 填 ...

  8. [蓝桥杯]2020年第十一届省赛真题C/C++ B组(七月)

    第十一届蓝桥杯省赛题目 试题A: 跑步训练 试题B: 纪念日 试题C: 合并检测 试题D: REPEAT 程序 试题E: 矩阵 试题F: 整除序列 试题G: 解码 试题H: 走方格 试题I:整数拼接 ...

  9. 蓝桥杯嵌入式第十二届省赛真题

    第十二届蓝桥杯嵌入式-停车计费 文章目录 第十二届蓝桥杯嵌入式-停车计费 1.题目分析 2.项目结构 2.1停车部分整体流程 2.2串口数据解析流程 2.3细节部分 3.代码结构 3.1停车部分 3. ...

  10. 蓝桥杯2020年第十一届国赛真题-皮亚诺曲线距离

    我找不到满分题解,结果我肝一个下午肝出来了,有一说一,在考场碰到这题估计要没,今年国赛加油把,方法过于暴力,仅供参考 #include<iostream> #include<algo ...

最新文章

  1. 综合素质计算机能力,教资统考中学《综合素质》:信息处理能力(一)
  2. 如何获取元素在父级div里的位置_前端面试题--元素的BFC特性和实例
  3. 2020年全国大学生智能汽车竞赛山东赛区比赛专家组工作方案
  4. 服务器raid卡装虚拟机,DELLR730服务器阵列卡配置、VMware安装、WIN2008安装.docx
  5. 546. Remove Boxes 移除盒子
  6. 4、Node.js REPL(交互式解释器)
  7. flyway配置mysql_Flyway快速上手教程
  8. Python连接telnet客户端连接服务端程序
  9. java 多线程压测_java多线程Jmeter压测实现
  10. python datetime 加一个月_Python日期的加减等操作的示例
  11. linux网络服务学习笔记--基本网络配置
  12. tiny4412 串口驱动分析五 --- LDD3上TTY驱动程序源码
  13. stack(栈)数据结构详解
  14. win8下hosts保存文档失败,提示:请检查文件是否被另一个应用程序打开
  15. 2021最新抽奖网站源码
  16. C++信息学奥赛一本通_2060
  17. haxm device is not found
  18. js中的Image对象
  19. gitter 卸载_最佳的Gitter渠道:数据科学和机器学习
  20. 音创linux版e100加歌,麦得好ktv点歌机音创E100-A51,2.42新版本U盘加歌方法

热门文章

  1. 规模再创新高!新能源汽车蓝海谁主沉浮
  2. 飞书信外贸移动社交自建站系统玩转海外拼团分销
  3. python复数类型-Python 复数属性和方法操作实例
  4. c语言输出字符太阳,〖作业〗 C语言程序设计
  5. Origin 2017 给曲线加标记符号
  6. 计算机格式化后,电脑格式化后需要重装系统吗_格式化电脑重装系统的方法步骤...
  7. Excel下拉选项设置
  8. 据说是可减少50%的超越卓越经验
  9. 被“樊登读书”、“得到”与“混沌大学”围剿的创业者们
  10. 4G模块Air720系列 android RIL驱动源码发布