第一题  国王的遗产

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 = 12; i <= 10000; i++) {
 8             if (i % 4 == 0 && i % 5 == 0 && i % 6 == 0 && i % 7 == 0 && i % 8 == 0 && i % 9 == 0) {
 9                 if (i - i / 4 - i / 5 - i / 6 - i / 7 - i / 8 - i / 9 == 11) {
10                     System.out.println(i);
11                 }
12             }
13         }
14         // answer: 2520
15
16         // 验算
17         System.out.println(
18                 2520 / 4 + "  " + 2520 / 5 + "  " + 2520 / 6 + "  " + 2520 / 7 + "  " + 2520 / 8 + "  " + 2520 / 9);
19         int res = 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个整数排列成六角形状,如下:

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

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

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

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

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

解决思路:DFS

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

第三题  格子放鸡蛋

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

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

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

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

  1. 2016年第七届蓝桥杯决赛Java本科B组试题解析

    第一题  愤怒小鸟 X星球愤怒的小鸟喜欢撞火车! 一根平直的铁轨上两火车间相距 1000 米 两火车 (不妨称A和B) 以时速 10米/秒 相对行驶. 愤怒的小鸟从A车出发,时速50米/秒,撞向B车, ...

  2. 2013蓝桥杯java试题_蓝桥杯2013决赛java本科b组试题.doc

    蓝桥杯2013决赛java本科b组试题.doc 试题一:公式求值问题描述输入n,m,k,输出下面公式的值.其中C_n^m是组合数,表示在n个人的集合中选出m个人组成一个集合的方案数.组合数的计算公式如 ...

  3. 三阶幻方java解法_蓝桥杯决赛 Java大学B组 第二题 反幻方

    题目 反幻方 我国古籍很早就记载着 2 9 4 7 5 3 6 1 8 这是一个三阶幻方.每行每列以及对角线上的数字相加都相等. 下面考虑一个相反的问题. 可不可以用 1~9 的数字填入九宫格. 使得 ...

  4. 2020第十一届蓝桥杯-决赛-Java大学-C组

    试题 A: 美丽的 2 本题总分:5 分 [问题描述] 小蓝特别喜欢 2,今年是公元 2020 年,他特别高兴. 他很好奇,在公元 1 年到公元 2020 年(包含)中,有多少个年份的数位中 包含数字 ...

  5. 第五届蓝桥杯C/C++本科B组(真题试做)(1~5)

    菜鸡只能报个B组.于是报了第六届的本科B.就找了上届的本科B的题来做做. A: 标题:啤酒和饮料啤酒每罐2.3元,饮料每罐1.9元.小明买了若干啤酒和饮料,一共花了82.3元.我们还知道他买的啤酒比饮 ...

  6. 第五届蓝桥杯C/C++本科B组(真题试做)(9~10)

    第九题 迷宫取宝 标题:地宫取宝X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签.地宫的入口在左上角,出口在右下角.小明被带到地宫的入口,国王要求他只能向 ...

  7. 2018第九届蓝桥杯-决赛-Java大学-C组

    标题:年龄问题 s夫人一向很神秘.这会儿有人问起她的年龄,她想了想说: "20年前,我丈夫的年龄刚好是我的2倍,而现在他的年龄刚好是我的1.5倍". 你能算出s夫人现在的年龄吗? ...

  8. 2019第十届蓝桥杯-决赛-Java大学-C组

    试题 A: 奇数倍数 本题总分: 5 分 [问题描述] 请你找到最小的整数 X 同时满足: • X 是 2019 的整倍数 • X 的每一位数字都是奇数 [答案提交] 这是一道结果填空的题,你只需要算 ...

  9. 第五届蓝桥杯C/C++本科B组(真题试做)(6~8)

    终于考完--不过挂科的铁定的了. 还是来做题吧. 前面八道题做起来都很简单. F: 标题:奇怪的分式上小学的时候,小明经常自己发明新算法.一次,老师出的题目是:1/4 乘以 8/5 小明居然把分子拼接 ...

最新文章

  1. php 为啥报错,php Soap 报错 求大神帮忙看看为什么
  2. 差分优化算法(DE)matlb源码中文注解
  3. MongoDB:逐渐变得无关紧要
  4. dmz“非军事化区”
  5. 微信支付通知 php,微信支付开发交易通知实例
  6. android代码导入有错误,android新项目导入后进行编译出现cmake错误
  7. 雷军 1994 年写的代码,你见过吗?厉害了!
  8. Tensorflow——张量
  9. kafka java_Java操作Kafka
  10. 如何获取web视频数据流的传输?小姐姐的视频都被我爬下来了,这谁顶得住
  11. git svn clone
  12. 剑指Offer_编程题_16
  13. Hibernate入门教程
  14. C# 仿windows资源管理器
  15. 计算机二级java难吗_计算机二级上机-计算机二级难吗?二级高级语言:分笔试和上机考试笔试90分钟, 爱问知识人...
  16. 通过PackageManager、PackageInfo、ApplicationInfo、ActivityInfo获得你想要的 App 信息
  17. java实现蒲丰投针求,用程序模拟蒲丰投针试验
  18. Pyecharts上的颜色设置
  19. 新手小白怎么学抖音运营?抖音运营5大技巧
  20. 自控重点整理1.1 比例微分PD控制器的作用

热门文章

  1. ios 3DTouch初识
  2. vue2.0 + vux (五)api接口封装 及 首页 轮播图制作
  3. 用Genymotion来调试android应用
  4. hdu 5945 Fxx and game
  5. 黑客带来了病毒攻击软件还是文化?
  6. JS实现HTML上用button打开文件对话框
  7. gtkorphan清理孤立软件包
  8. [导入]将文字内容和图片插入到Access数据库(转帖)
  9. php 开发 比 java 快_PHP 比 Java 的开发效率高在哪?
  10. mysql sql 事务写作_mysql中的事务