热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

2014年第五届蓝桥杯决赛Java本科B组试题解析

第一题国王的遗产X国是个小国。国王K有6个儿子。在临终前,K国王立下遗嘱:国王的一批牛作为遗产要分给他的6个儿子。其中,大儿子分14&#x

 

 

 

第一题  国王的遗产

X国是个小国。国王K有6个儿子。在临终前,K国王立下遗嘱:国王的一批牛作为遗产要分给他的6个儿子。
其中,大儿子分1/4,二儿子1/5,三儿子1/6,....
直到小儿子分1/9。
牛是活的,不能把一头牛切开分。

最后还剩下11头牛,分给管家。

请计算国王这批遗产中一共有多少头牛。

这是一个整数,请通过浏览器提交答案,不要填写任何多余的内容(比如说明性的文字)

1 // 国王的遗产
2
3 public class t1 {
4
5 public static void main(String[] args) {
6
7 for (int i &#61; 12; i <&#61; 10000; i&#43;&#43;) {
8 if (i % 4 &#61;&#61; 0 && i % 5 &#61;&#61; 0 && i % 6 &#61;&#61; 0 && i % 7 &#61;&#61; 0 && i % 8 &#61;&#61; 0 && i % 9 &#61;&#61; 0) {
9 if (i - i / 4 - i / 5 - i / 6 - i / 7 - i / 8 - i / 9 &#61;&#61; 11) {
10 System.out.println(i);
11 }
12 }
13 }
14 // answer: 2520
15
16 // 验算
17 System.out.println(
18 2520 / 4 &#43; " " &#43; 2520 / 5 &#43; " " &#43; 2520 / 6 &#43; " " &#43; 2520 / 7 &#43; " " &#43; 2520 / 8 &#43; " " &#43; 2520 / 9);
19 int res &#61; 2520 - 2520 / 4 - 2520 / 5 - 2520 / 6 - 2520 / 7 - 2520 / 8 - 2520 / 9;
20 System.out.println(res);
21 }
22
23 }

 

 

第二题  六角幻方

把 1 2 3 ... 19 共19个整数排列成六角形状&#xff0c;如下&#xff1a;

    * * *
  * * * *
 * * * * *
  * * * *
   * * *

要求每个直线上的数字之和必须相等。共有15条直线哦&#xff01;

再给点线索吧&#xff01;我们预先填好了2个数字&#xff0c;第一行的头两个数字是&#xff1a;15 13&#xff0c;参见图【p1.png】&#xff0c;黄色一行为所求

 

请你填写出中间一行的5个数字。数字间用空格分开。

这是一行用空格分开的整数&#xff0c;请通过浏览器提交答案&#xff0c;不要填写任何多余的内容&#xff08;比如说明性的文字等&#xff09;

 
解决思路&#xff1a;DFS

1 // 六角幻方
2 // 每一行的和应该是38 (1到19的和是190&#xff0c;190/5&#61;38)
3
4 public class t2 {
5
6 public static boolean[] vis &#61; new boolean[20];
7 public static int[] a &#61; new int[20];
8
9 public static void dfs(int x) {
10 // 剪枝
11 if (x &#61;&#61; 8) {
12 if (a[4] &#43; a[5] &#43; a[6] &#43; a[7] !&#61; 38)
13 return;
14 }
15 if (x &#61;&#61; 9) {
16 if (15 &#43; a[4] &#43; a[8] !&#61; 38)
17 return;
18 }
19 if (x &#61;&#61; 13) {
20 if (a[8] &#43; a[9] &#43; a[10] &#43; a[11] &#43; a[12] !&#61; 38)
21 return;
22 if (a[3] &#43; a[7] &#43; a[12] !&#61; 38)
23 return;
24 }
25 if (x &#61;&#61; 14) {
26 if (38 !&#61; 13 &#43; a[5] &#43; a[9] &#43; a[13])
27 return;
28 }
29 if (x &#61;&#61; 17) {
30 if (13 &#43; a[6] &#43; a[11] &#43; a[16] !&#61; 38 || a[13] &#43; a[14] &#43; a[15] &#43; a[16] !&#61; 38)
31 return;
32 }
33 if (x &#61;&#61; 18) {
34 if (a[3] &#43; a[6] &#43; a[10] &#43; a[14] &#43; a[17] !&#61; 38 || a[8] &#43; a[13] &#43; a[17] !&#61; 38)
35 return;
36 }
37 if (x &#61;&#61; 19) {
38 if (a[7] &#43; a[11] &#43; a[15] &#43; a[18] !&#61; 38 || a[4] &#43; a[9] &#43; a[14] &#43; a[18] !&#61; 38)
39 return;
40 }
41 if (x &#61;&#61; 20) {
42 // 最后出口
43 if (a[17] &#43; a[18] &#43; a[19] &#61;&#61; 38) {
44 System.out.println(a[8] &#43; " " &#43; a[9] &#43; " " &#43; a[10] &#43; " " &#43; a[11] &#43; " " &#43; a[12]);
45 // answer: 9 6 5 2 16
46 return;
47 }
48 }
49 for (int i &#61; 1; i <20; i&#43;&#43;) {
50 if (!vis[i]) {
51 vis[i] &#61; true;
52 a[x] &#61; i;
53 dfs(x &#43; 1);
54 vis[i] &#61; false;
55 }
56 }
57 }
58
59 public static void main(String[] args) {
60
61 a[1] &#61; 15;
62 a[2] &#61; 13;
63 a[3] &#61; 10;
64 vis[15] &#61; vis[13] &#61; vis[10] &#61; true;
65 dfs(4);
66
67 }
68
69 }

 

 

第三题  格子放鸡蛋

1 X星球的母鸡很聪明。它们把蛋直接下在一个 N * N 的格子中&#xff0c;每个格子只能容纳一枚鸡蛋。它们有个习惯&#xff0c;要求&#xff1a;每行&#xff0c;每列&#xff0c;以及每个斜线上都不能有超过2个鸡蛋。如果要满足这些要求&#xff0c;母鸡最多能下多少蛋呢&#xff0c;有多少种摆放方法呢&#xff1f;
2
3
4 下面的程序解决了这个问题&#xff0c;请仔细分析程序逻辑&#xff0c;推断划线处缺少的代码。
5
6 public class A
7 {
8 static int max &#61; 0;
9 static int T &#61; 0;
10 static final int N &#61; 6;
11
12 // 只能在(r,c) 以及其右&#xff0c;其下放置
13 static void f(int[][] da, int r, int c)
14 {
15 if(r>&#61;N){
16 int n &#61; count(da);
17 if(n>max) {
18 max &#61; n;
19 T &#61; 0;
20 }
21 if(n&#61;&#61;max) T&#43;&#43;;
22 return;
23 }
24
25 //计算一下步放哪
26 int r_next &#61; r;
27 int c_next &#61; c &#43; 1;
28 if(c_next>&#61;N){
29 c_next &#61; 0;
30 r_next&#43;&#43;;
31 }
32
33 if(____________________){ // 填空位置
34 da[r][c] &#61; 1;
35 f(da, r_next, c_next);
36 }
37
38 da[r][c] &#61; 0;
39 f(da, r_next, c_next);
40 }
41
42 static int count(int[][] da)
43 {
44 int n &#61; 0;
45
46 for(int i&#61;0; i)
47 for(int j&#61;0; j)
48 if(da[i][j]&#61;&#61;1) n&#43;&#43;;
49
50 return n;
51 }
52
53 static int spy(int[][] da, int r, int c)
54 {
55 int m&#61;0;
56
57 // 该行
58 int n&#61;0;
59 for(int i&#61;0; iif(da[r][i]&#61;&#61;1) n&#43;&#43;;
60 if(n>m) m &#61; n;
61
62 //该列
63 n&#61;0;
64 for(int i&#61;0; iif(da[i][c]&#61;&#61;1) n&#43;&#43;;
65 if(n>m) m &#61; n;
66
67 //右斜线
68 n&#61;0;
69 for(int i&#61;0; i){
70 if(r-i<0 || c-i<0) break;
71 if(da[r-i][c-i]&#61;&#61;1) n&#43;&#43;;
72 }
73 for(int i&#61;1; i){
74 if(r&#43;i>&#61;N || c&#43;i>&#61;N) break;
75 if(da[r&#43;i][c&#43;i]&#61;&#61;1) n&#43;&#43;;
76 }
77 if(n>m) m &#61; n;
78
79 //左斜线
80 n&#61;0;
81 for(int i&#61;0; i){
82 if(r-i<0 || c&#43;i>&#61;N) break;
83 if(da[r-i][c&#43;i]&#61;&#61;1) n&#43;&#43;;
84 }
85 for(int i&#61;1; i){
86 if(r&#43;i>&#61;N || c-i<0) break;
87 if(da[r&#43;i][c-i]&#61;&#61;1) n&#43;&#43;;
88 }
89 if(n > m) m &#61; n;
90
91 return m;
92 }
93
94 public static void main(String[] args)
95 {
96 int[][] da &#61; new int[N][N];
97
98 f(da, 0, 0);
99
100 System.out.println(max);
101 System.out.println(T);
102 }
103 }
104
105 注意&#xff1a;通过浏览器提交答案。只填写缺少的内容&#xff0c;不要填写任何多余的内容&#xff08;例如&#xff1a;说明性文字或已有符号&#xff09;。

解决思路&#xff1a;经典算法N皇后问题的变体&#xff0c;读完题可以知道大概是要根据spy函数的调用结果来判断

1 public class t3 {
2
3 static int max &#61; 0;
4 static int T &#61; 0;
5 static final int N &#61; 6;
6
7 // 只能在(r,c) 以及其右&#xff0c;其下放置
8 static void f(int[][] da, int r, int c) {
9 if (r >&#61; N) {
10 int n &#61; count(da);
11 if (n > max) {
12 max &#61; n;
13 T &#61; 0;
14 }
15 if (n &#61;&#61; max)
16 T&#43;&#43;;
17 return;
18 }
19
20 // 计算一下步放哪
21 int r_next &#61; r;
22 int c_next &#61; c &#43; 1;
23 if (c_next >&#61; N) {
24 c_next &#61; 0;
25 r_next&#43;&#43;;
26 }
27
28 if (spy(da, r, c) <2) { // 填空位置
29 da[r][c] &#61; 1;
30 f(da, r_next, c_next);
31 }
32
33 da[r][c] &#61; 0;
34 f(da, r_next, c_next);
35 }
36
37 static int count(int[][] da) {
38 int n &#61; 0;
39
40 for (int i &#61; 0; i )
41 for (int j &#61; 0; j )
42 if (da[i][j] &#61;&#61; 1)
43 n&#43;&#43;;
44
45 return n;
46 }
47
48 static int spy(int[][] da, int r, int c) {
49 int m &#61; 0;
50
51 // 该行
52 int n &#61; 0;
53 for (int i &#61; 0; i )
54 if (da[r][i] &#61;&#61; 1)
55 n&#43;&#43;;
56 if (n > m)
57 m &#61; n;
58
59 // 该列
60 n &#61; 0;
61 for (int i &#61; 0; i )
62 if (da[i][c] &#61;&#61; 1)
63 n&#43;&#43;;
64 if (n > m)
65 m &#61; n;
66
67 // 右斜线
68 n &#61; 0;
69 for (int i &#61; 0; i ) {
70 if (r - i <0 || c - i <0)
71 break;
72 if (da[r - i][c - i] &#61;&#61; 1)
73 n&#43;&#43;;
74 }
75 for (int i &#61; 1; i ) {
76 if (r &#43; i >&#61; N || c &#43; i >&#61; N)
77 break;
78 if (da[r &#43; i][c &#43; i] &#61;&#61; 1)
79 n&#43;&#43;;
80 }
81 if (n > m)
82 m &#61; n;
83
84 // 左斜线
85 n &#61; 0;
86 for (int i &#61; 0; i ) {
87 if (r - i <0 || c &#43; i >&#61; N)
88 break;
89 if (da[r - i][c &#43; i] &#61;&#61; 1)
90 n&#43;&#43;;
91 }
92 for (int i &#61; 1; i ) {
93 if (r &#43; i >&#61; N || c - i <0)
94 break;
95 if (da[r &#43; i][c - i] &#61;&#61; 1)
96 n&#43;&#43;;
97 }
98 if (n > m)
99 m &#61; n;
100
101 return m;
102 }
103
104 public static void main(String[] args) {
105 int[][] da &#61; new int[N][N];
106
107 f(da, 0, 0);
108
109 System.out.println(max);
110 System.out.println(T);
111 }
112
113 }

 


转载于:https://www.cnblogs.com/wyb666/p/10872024.html


推荐阅读
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
  • andr ... [详细]
  • 深入理解Java泛型:JDK 5的新特性
    本文详细介绍了Java泛型的概念及其在JDK 5中的应用,通过具体代码示例解释了泛型的引入、作用和优势。同时,探讨了泛型类、泛型方法和泛型接口的实现,并深入讲解了通配符的使用。 ... [详细]
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 本文详细介绍了Java中的访问器(getter)和修改器(setter),探讨了它们在保护数据完整性、增强代码可维护性方面的重要作用。通过具体示例,展示了如何正确使用这些方法来控制类属性的访问和更新。 ... [详细]
  • 图数据库中的知识表示与推理机制
    本文探讨了图数据库及其技术生态系统在知识表示和推理问题上的应用。通过理解图数据结构,尤其是属性图的特性,可以为复杂的数据关系提供高效且优雅的解决方案。我们将详细介绍属性图的基本概念、对象建模、概念建模以及自动推理的过程,并结合实际代码示例进行说明。 ... [详细]
  • 本文介绍如何在Java项目中使用Log4j库进行日志记录。我们将详细说明Log4j库的引入、配置及简单应用,帮助开发者快速上手。 ... [详细]
  • 本题涉及一棵由N个节点组成的树(共有N-1条边),初始时所有节点均为白色。题目要求处理两种操作:一是改变某个节点的颜色(从白变黑或从黑变白);二是查询从根节点到指定节点路径上的第一个黑色节点,若无则输出-1。 ... [详细]
  • 本文探讨了如何在模运算下高效计算组合数C(n, m),并详细介绍了乘法逆元的应用。通过扩展欧几里得算法求解乘法逆元,从而实现除法取余的计算。 ... [详细]
  • Splay Tree 区间操作优化
    本文详细介绍了使用Splay Tree进行区间操作的实现方法,包括插入、删除、修改、翻转和求和等操作。通过这些操作,可以高效地处理动态序列问题,并且代码实现具有一定的挑战性,有助于编程能力的提升。 ... [详细]
  • 本文详细介绍了 Apache Jena 库中的 Txn.executeWrite 方法,通过多个实际代码示例展示了其在不同场景下的应用,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
author-avatar
窝窝笑丫
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有