蓝桥杯Java-B组2014年试题解题笔记(上)

简介: 蓝桥杯Java-B组2014年试题解题笔记

第一题:武功秘籍

题目描述

小明到X山洞探险,捡到一本有破损的武功秘籍(2000多页!当然是伪造的)。他注意到:书的第10页和第11页在同一张纸上,但第11页和第12页不在同一张纸上。

小明只想练习该书的第81页到第92页的武功,又不想带着整本书。请问他至少要撕下多少张纸带走?

这是个整数,请通过浏览器提交该数字,不要填写任何多余的内容。

第二题:切面条

题目描述

一根高筋拉面,中间切一刀,可以得到2根面条。

如果先对折1次,中间切一刀,可以得到3根面条。

如果连续对折2次,中间切一刀,可以得到5根面条。

那么,连续对折10次,中间切一刀,会得到多少面条呢?

答案是个整数,请通过浏览器提交答案。不要填写任何多余的内容。

第三题:猜字母

题目描述

把abcd…s共19个字母组成的序列重复拼接106次,得到长度为2014的串。接下来删除第1个字母(即开头的字母a),以及第3个,第5个等所有奇数位置的字母。得到的新串再进行删除奇数位置字母的动作。如此下去,最后只剩下一个字母,请写出该字母。

答案是一个小写字母,请通过浏览器提交答案。不要填写任何多余的内容。

解题思路

模拟

解题代码

package 蓝桥杯.Java14年B;
import java.util.ArrayList;
public class 猜字母 {
    static ArrayList<Character> a = new ArrayList<>();//存储当前的字符串
    static ArrayList<Character> b = new ArrayList<>();//保存保留下来的字母
    public static void main(String[] args) {
        link();//拼接出初始的字符串
        while ( a.size()>1 ) { //剩余的个数大于1继续循环
            //取出奇数位置的字母,因为存储的下标从0开始
            //相当于题目要求的,去除奇数位置的字母
            getOdd();
            a = b;//更新当前的字符串
            b = new ArrayList<>();
        }
        System.out.println(a.get(0));//输出答案
    }
    //拼接最开始的字符串
    public static void link() {
        char[] chars = "abcdefghijklmnopqrs".toCharArray();
        for ( int i=0; i<106; i++ ) {
            for ( int j=0; j<19; j++ ) {
                a.add(chars[j]);
            }
        }
    }
    //得到奇数位置的字母   因为存储从0开始
    public static void getOdd() {
        for ( int i=1; i<a.size(); i+=2 ) {
            b.add(a.get(i));
        }
    }
}

第四题:大衍数列

题目描述

中国古代文献中,曾记载过“大衍数列”, 主要用于解释中国传统文化中的太极衍生原理。它的前几项是:0、2、4、8、12、18、24、32、40、50 …

其规律是:对偶数项,是序号平方再除2,奇数项,是序号平方减1再除2。

以下的代码打印出了大衍数列的前 100 项。

for(int i=1; i<100; i++)
{
    if(________________)  //填空
        System.out.println(i*i/2);
    else
        System.out.println((i*i-1)/2);
}

解题思路

判断下标的奇偶,分别进行处理,题目处理代码已给出,缺少奇偶的判断

解题代码

package 蓝桥杯.Java14年B;
public class 大衍数列 {
    public static void main(String[] args) {
        for ( int i=1; i<100; i++ ) {
            //判断是否为偶数
            //答案  i%2==0
            if ( i%2==0 ) System.out.println( i*i/2 );
            else System.out.println( (i*i-1)/2 );
        }
    }
}

第五题:圆周率

题目描述

数学发展历史上,圆周率的计算曾有许多有趣甚至是传奇的故事。其中许多方法都涉及无穷级数。

图1.png中所示,就是一种用连分数的形式表示的圆周率求法。

下面的程序实现了该求解方法。实际上数列的收敛对x的初始值 并不敏感。

结果打印出圆周率近似值(保留小数点后4位,并不一定与圆周率真值吻合)。

题目代码

double x = 111; 
    for(int n = 10000; n>=0; n--){
        int i = 2 * n + 1;
        x = 2 + (i*i / x);
    }
    System.out.println(String.format("%.4f", ______________));

解题思路

解题代码

package 蓝桥杯.Java14年B;
public class 圆周率 {
    public static void main(String[] args) {
        double x = 111;
        for(int n = 10000; n>=0; n--){
            int i = 2 * n + 1;
            x = 2 + (i*i / x);
        }
//        System.out.println(String.format("%.4f", ______________));
        System.out.println(String.format("%.4f", (4/(x-1))));
    }
}

第六题:奇怪的分式

题目描述

上小学的时候,小明经常自己发明新算法。一次,老师出的题目是:

1/4 乘以 8/5

小明居然把分子拼接在一起,分母拼接在一起,答案是:18/45 (参见图1.png)

老师刚想批评他,转念一想,这个答案凑巧也对啊,真是见鬼!

对于分子、分母都是 1~9 中的一位数的情况,还有哪些算式可以这样计算呢?

请写出所有不同算式的个数(包括题中举例的)。

显然,交换分子分母后,例如:4/1 乘以 5/8 是满足要求的,这算做不同的算式。

但对于分子分母相同的情况,2/2 乘以 3/3 这样的类型太多了,不在计数之列!

注意:答案是个整数(考虑对称性,肯定是偶数)。请通过浏览器提交。不要书写多余的内容。

解题思路

枚举模拟,计算正常计算方法的结果和题目中的方法的结果,通分成分母相同的结果,比较大小

解题代码

填空题,没有时间限制,直接暴力求解

package 蓝桥杯.Java14年B;
public class 奇怪的分式 {
    public static void main(String[] args) {
        int sum = 0;
        for ( int a=1; a<=9; a++ ) { //枚举第一个分式的分子
            for ( int b=1; b<=9; b++ ) { //枚举第一个分式的分母
                for ( int c=1; c<=9; c++ ) { //枚举第二个分式的分子 
                    for ( int d=1; d<=9; d++ ) { //枚举第二个分式的分母
                        if ( a!=b && c!=d ) { //分式的分子分母不能相同
                            int son1 = a*c; //正常计算方法的结果的分子
                            int parent1 = b*d;//正常计算方法的结果的分母
                            int son2 = a*10+c;//题目中方法的结果的分子
                            int parent2 = b*10+d;//题目中方法的结果的分母
                            int mid = mid( parent1, parent2, gcd( parent1, parent2 ) );//最小公倍数
                            if ( son1*(mid/parent1)==son2*(mid/parent2) ) { //判断通分后的结过是否相等
                                sum++; //相等个数++
                                System.out.println( a+" "+b+" "+c+" "+d );
                            }
                        }
                    }
                }
            }
        }
        System.out.println( sum );
    }
    //求最大公约数
    public static int gcd( int a, int b ) {
        return b>0 ? gcd(b, a%b) : a;
    }
    //求最小公倍数
    public static int mid( int a, int b, int c ) {
        return a*b/c;
    }
}

相关文章
|
6天前
|
Java
2016届蓝桥杯大赛软件类国赛Java大学B组 愤怒小鸟 数学模拟
2016届蓝桥杯大赛软件类国赛Java大学B组 愤怒小鸟 数学模拟
22 4
|
6天前
|
Java
蓝桥杯Java组暴力递归搜图
蓝桥杯Java组暴力递归搜图
14 4
|
6天前
|
Java
2022蓝桥杯大赛软件类国赛Java大学B组 左移右移 空间换时间+双指针
2022蓝桥杯大赛软件类国赛Java大学B组 左移右移 空间换时间+双指针
15 3
|
6天前
|
Java
2021蓝桥杯大赛软件类国赛Java大学B组 完全日期 复杂遍历搜索
2021蓝桥杯大赛软件类国赛Java大学B组 完全日期 复杂遍历搜索
12 2
|
6天前
|
Java
2023届蓝桥杯大赛软件类国赛Java大学B组 互质 数论
2023届蓝桥杯大赛软件类国赛Java大学B组 互质 数论
6 1
|
6天前
|
Java
2023蓝桥杯大赛软件类省赛Java大学B组G题 买二增一 队列的简单应用
2023蓝桥杯大赛软件类省赛Java大学B组G题 买二增一 队列的简单应用
10 1
|
9天前
|
Java
2021蓝桥杯大赛软件类省赛Java大学B组 时间显示
2021蓝桥杯大赛软件类省赛Java大学B组 时间显示
14 0
2021蓝桥杯大赛软件类省赛Java大学B组 时间显示
|
3天前
|
Java BI C#
技术笔记:SM4加密算法实现Java和C#相互加密解密
技术笔记:SM4加密算法实现Java和C#相互加密解密
|
3天前
|
Java Maven Python
技术笔记:Lombok介绍、使用方法和总结
技术笔记:Lombok介绍、使用方法和总结
|
6天前
|
存储 前端开发 算法
2016届蓝桥杯大赛软件类国赛Java大学B组 反幻方 暴力搜索
2016届蓝桥杯大赛软件类国赛Java大学B组 反幻方 暴力搜索
4 0