2012年第三届蓝桥杯Java本科组省赛试题解析
题目地址:https://wenku.baidu.com/view/326f7b4be518964bcf847c96.html?rec_flag=default => 百度文档
题目及解析如下:
题目大致介绍:
第一题到第四题是结果填空,方法不限只要得到最后结果就行
第五题到第七题是代码填空,要求在指定的位置处填代码
第八题到第十题是编程题,要求编程解决问题
第一题

第一题很简单,就是个签到题,详情如下:
 // 黄金分割数
 public class t1 {
     public static void main(String[] args) {
         int a = 1;
         int b = 3;
         for(int i=0; i<=50; i++) {
             int temp = a + b;
             double s = (double)b/temp;
             System.out.println(b + " " + temp + " " + s);
             a = b;
             b = temp;
         }
     }
     // answer: 5778 9349 0.6180340143330838
     // 最后提交的答案: 5778 9349
     // 注: 为了求稳  算出答案后可以用电脑中带的计算器验算一下
 }
第二题

思路:每次都是所有人平分一瓶酒,然后船长喝了四次,并且正好喝了一瓶
 // 海盗比酒量
 public class t2 {
     public static void main(String[] args) {
         for (int m = 1; m <= 20; m++) {
             for (int n = 1; n < m; n++) {
                 for (int p = 1; p < n; p++) {
                     for (int q = 1; q < p; q++) {
                         if (n * p * q + m * p * q + m * n * q + m * n * p == m * n * p * q) {
                             System.out.println(m + "," + n + "," + p + "," + q + "," + 0);
                         }
                     }
                 }
             }
         }
     }
 }
第三题

1个圆盘移动1次,2个圆盘移动3次,3个圆盘移动7次,n个圆盘就是移动2^n-1次,64个圆盘就是移动2^64-1次
写代码计算如下:
 import java.math.BigInteger;
 public class t3 {
     public static void f(int n) {
         BigInteger a = new BigInteger("1");
         for (int i = 1; i <= n; i++) {
             a = a.multiply(new BigInteger("2"));
         }
         a = a.subtract(new BigInteger("1"));
         System.out.println(a.toString());
     }
     public static void f2(int n) {
         //
         long a = 1;
         for (int i = 1; i <= n; i++) {
             a = a * 2;
         }
         System.out.println(a - 1);
     }
     public static void main(String[] args) {
         f(1);    // 1
         f(2);    //
         f(3);    //
         f(64);    //
         f2(63);    // 将这个答案*2+1就是最后的答案(也就是f(64))
         f2(64);    // 爆了、、、
     }
 }
第四题

比较简单的递归,代码如下:
 public class t4 {
     public static void f(int score, int n, String str) {
         if (n == 10 && score == 100) {
             System.out.println(str);
             return;
         }
         if (n == 10) {
             return;
         }
         f(score * 2, n + 1, str + "1"); // 答对
         f(score - (n + 1), n + 1, str + "0"); // 答错
     }
     public static void main(String[] args) {
         f(10, 0, "");
         // answer:
         // 1011010000
         // 0111010000
         //
     }
 }
第五题

常规题,代码如下:
 public class t5 {
     public static int getFirstNum(String s) {
         if(s == null || s.length() == 0) {
             return -1;
         }
         char c = s.charAt(0);
         if(c>='0' && c<='9') {
             return c - '0';
         }
         return getFirstNum(s.substring(1));
     }
     public static void main(String[] args) {
         System.out.println(getFirstNum("abc24us43"));
         System.out.println(getFirstNum("82445adb5"));
         System.out.println(getFirstNum("ab"));
     }
 }
第六题



常规数学问题,代码如下:
 public class t6 {
     public static void main(String[] args)
     {
         System.out.println("标准 " + Math.PI);
         double a = 1;
         int n = 6;
         for(int i=0; i<10; i++){    // 可以把n改成100 看更多的结果
             double b = Math.sqrt(1-(a/2)*(a/2));
             a = Math.sqrt((1-b)*(1-b) + (a/2)*(a/2));
             n = 2 * n; //填空
             System.out.println(n + "  " + a*n/2); // 填空
         }
     }
 }
第七题


常规递归,不断尝试,从而写出如下代码:
 import java.util.*;
 public class t7 {
     public static List<Integer> max5(List<Integer> lst)
     {
         if(lst.size()<=5) return lst;
         int a = lst.remove(0);  // 填空
         List<Integer> b = max5(lst);
         for(int i=0; i<b.size(); i++){
             int t = b.get(i);
             if(a>t){
                 lst.set(i, a);  // 填空
                 a = t;
             }
         }
         return b;
     }
     public static void main(String[] args)
     {
         List<Integer> lst = new Vector<Integer>();
         lst.addAll(Arrays.asList(12,127,85,66,27,34,15,344,156,344,29,47));
         System.out.println(max5(lst));
     }
 }
第八题




看不懂,懒得做
第九题


用暴力法解决如下:
 public class t9 {
     public static void main(String[] args) {
         char[] a = {' ', '+', '-'};
         char[] num = {'1', '2', '3', '4', '5', '6', '7', '8', '9'};
         for(char x1: a)
             for(char x2: a)
                 for(char x3: a)
                     for(char x4: a)
                         for(char x5: a)
                             for(char x6: a)
                                 for(char x7: a)
                                     for(char x8: a) {
                                         int res = 0;
                                         char[] s = {x1, x2, x3, x4, x5, x6, x7, x8};
                                         String str = "";
                                         for(int i=0; i<=7; i++) {
                                             str = str + num[i] + s[i];
                                         }
                                         str = str + num[8];
                                         str = str.replaceAll(" ", "");
                                         String[] subStrs = str.split("-");
                                         int[] addResults = new int[subStrs.length];
                                         // 把第一个减号之前的都加起来
                                         String startStr = subStrs[0];
                                         String[] startStrs = startStr.split("[+]");
                                         for(int i=0; i<startStrs.length; i++) {
                                             res += Integer.parseInt(startStrs[i]);
                                         }
                                         // 第一个减号之后的
                                         for(int i=1; i<subStrs.length; i++) {
                                             String[] strs = subStrs[i].split("[+]");
                                             // -
                                             res -= Integer.parseInt(strs[0]);
                                             for(int j=1; j<strs.length; j++) {
                                                 // +
                                                 res += Integer.parseInt(strs[j]);
                                             }
                                         }
                                         if(res==110) {
                                             System.out.println(str);
                                         }
                                     }
     }
 }
第十题

2012年第三届蓝桥杯Java本科组省赛试题解析的更多相关文章
- 第三届蓝桥杯Java高职组决赛第三题
		
题目描述: 某少年宫引进了一批机器人小车.可以接受预先输入的指令,按指令行动.小车的基本动作很简单,只有3种:左转(记为L),右转(记为R),向前走若干厘米(直接记数字). 例如,我们可以对小车输入如 ...
 - 第三届蓝桥杯Java高职组决赛第一题
		
题目描述: 看这个算式: ☆☆☆ + ☆☆☆ = ☆☆☆ 如果每个五角星代表 1 ~ 9 的不同的数字. 这个算式有多少种可能的正确填写方法? 173 + 286 = 459 295 + 173 = ...
 - 第三届蓝桥杯C++B组省赛
		
1.微生物增值 2.古堡算式 3.海盗比酒量 4.奇怪的比赛 5.方阵旋转 6.大数乘法 7.放棋子 8.密码发生器 9.夺冠概率 10.取球博弈
 - 2012年第三届蓝桥杯C/C++程序设计本科B组省赛 取球博弈
		
2012年第三届蓝桥杯C/C++程序设计本科B组省赛 取球博弈 题目描述 **取球博弈 今盒子里有n个小球,A.B两人轮流从盒中取球,每个人都可以看到另一个人取了多少个,也可以看到盒中还剩下多少个,并 ...
 - 第八届蓝桥杯java b组第六题
		
标题:最大公共子串 最大公共子串长度问题就是:求两个串的所有子串中能够匹配上的最大长度是多少. 比如:"abcdkkk" 和 "baabcdadabc",可以找 ...
 - 2012年第三届蓝桥杯C/C++程序设计本科B组决赛
		
1.星期几(取余/excel) 2.数据压缩 3.拼音字母(比较) 4.DNA比对(dp) 5.方块填数 1.星期几[结果填空] (满分5分) 1949年的国庆节(10月1日)是星期六. ...
 - 2012年第三届蓝桥杯C/C++程序设计本科B组省赛 方阵旋转(代码填空)
		
方阵旋转 对一个方阵转置,就是把原来的行号变列号,原来的列号变行号 例如,如下的方阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 转置后变为: 1 5 9 13 2 ...
 - 2012年第三届蓝桥杯C/C++程序设计本科B组省赛题目 海盗比酒量 结果填空
		
** 一.题目 ** 海盗比酒量 有一群海盗(不多于20人),在船上比拼酒量.过程如下:打开一瓶酒,所有在场的人平分喝下,有几个人倒下了.再打开一瓶酒平分,又有倒下的,再次重复- 直到开了第4瓶酒,坐 ...
 - 2012年第三届蓝桥杯C/C++程序设计本科B组省赛 密码发生器
		
密码发生器 题目描述: ```bash 在对银行账户等重要权限设置密码的时候,我们常常遇到这样的烦恼:如果为了好记用生日吧,容易被破解,不安全:如果设置不好记的密码,又担心自己也会忘记:如果写在纸上, ...
 
随机推荐
- Hadoop  JAVA HDFS客户端操作
			
JAVA HDFS客户端操作 通过API操作HDFS org.apache.logging.log4jlog4j-core2.8.2org.apache.hadoophadoop-common${ha ...
 - java注解的自定义和使用
			
小伙伴们.今天我们来说说注解.标志@ .针对java不同版本来说,注解的出现是在jdk1.5 但是在jdk1.5版本使用注解必须继续类的方法的重写,不能用于实现的接口中的方法实现,在jdk1.6环境下 ...
 - FFMPEG-Java 入门
			
注意:FFMPEG-Java 和 Jffmpeg 不是一回事.FFMPEG-Java 是 Freedom for Media in Java(缩写为 FMJ)的一个子项目. 这个项目遵循 ...
 - [转]  openwrt关闭调试串口
			
转自: http://wiki.wrtnode.com/index.php?title=Release_UART/zh-cn 由于mt7620n只有一个UART lite接口,在原生的OpenWrt中 ...
 - backgroud 应用减小资源大小和请求数
			
一,一个典型的应用,利用小图的自动延伸,实现整个网页背景图,充分节约资源宽带.如:汽车之家的404页背景图就是这样 <div style="height: 3000px; backgr ...
 - HTML5 上传前端html页面
			
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
 - PPT资源
			
PPT模板下载:www.1ppt.com/moban/ 行业PPT模板:www.1ppt.com/hangye/ 节日PPT模板:www.1ppt.com/jieri/ PPT素材下载:www.1pp ...
 - DS二叉树--Huffman编码与解码
			
题目描述 1.问题描述 给定n个字符及其对应的权值,构造Huffman树,并进行huffman编码和译(解)码. 构造Huffman树时,要求左子树根的权值小于.等于右子树根的权值. 进行Huffma ...
 - 【linux】之常用命令-杂项
			
查看端口:lsof -i :80 二.内存大小[root@xbidc ~]# cat /proc/meminfo |grep MemTotalMemTotal: 1034612 kB[root@xbi ...
 - NGUI的数据绑定
			
ngui 的binding搜索结果 少之甚少 .即便去作者的youtube也收获不大 . 开发工作者更关心的是 数据的绑定,而不是一个显示控件简单属性的绑定. 说白了就是告诉用户 怎么绑定model吧 ...