第五届蓝桥杯JAVA本科B组试题及答案DOC.docx

上传人:b****4 文档编号:6778498 上传时间:2023-05-10 格式:DOCX 页数:14 大小:20.99KB
下载 相关 举报
第五届蓝桥杯JAVA本科B组试题及答案DOC.docx_第1页
第1页 / 共14页
第五届蓝桥杯JAVA本科B组试题及答案DOC.docx_第2页
第2页 / 共14页
第五届蓝桥杯JAVA本科B组试题及答案DOC.docx_第3页
第3页 / 共14页
第五届蓝桥杯JAVA本科B组试题及答案DOC.docx_第4页
第4页 / 共14页
第五届蓝桥杯JAVA本科B组试题及答案DOC.docx_第5页
第5页 / 共14页
第五届蓝桥杯JAVA本科B组试题及答案DOC.docx_第6页
第6页 / 共14页
第五届蓝桥杯JAVA本科B组试题及答案DOC.docx_第7页
第7页 / 共14页
第五届蓝桥杯JAVA本科B组试题及答案DOC.docx_第8页
第8页 / 共14页
第五届蓝桥杯JAVA本科B组试题及答案DOC.docx_第9页
第9页 / 共14页
第五届蓝桥杯JAVA本科B组试题及答案DOC.docx_第10页
第10页 / 共14页
第五届蓝桥杯JAVA本科B组试题及答案DOC.docx_第11页
第11页 / 共14页
第五届蓝桥杯JAVA本科B组试题及答案DOC.docx_第12页
第12页 / 共14页
第五届蓝桥杯JAVA本科B组试题及答案DOC.docx_第13页
第13页 / 共14页
第五届蓝桥杯JAVA本科B组试题及答案DOC.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

第五届蓝桥杯JAVA本科B组试题及答案DOC.docx

《第五届蓝桥杯JAVA本科B组试题及答案DOC.docx》由会员分享,可在线阅读,更多相关《第五届蓝桥杯JAVA本科B组试题及答案DOC.docx(14页珍藏版)》请在冰点文库上搜索。

第五届蓝桥杯JAVA本科B组试题及答案DOC.docx

第五届蓝桥杯JAVA本科B组试题及答案DOC

2014第五届蓝桥杯JAVA本科B组试题及答案

∙1.武功秘籍 

小明到X山洞探险,捡到一本有破损的武功秘籍(2000多页!

当然是伪造的)。

意识到:

书的第10页和第11页在同一张纸上,但第11页和第12页不在同一张纸上。

小明只想练习该书的第81页到第92页的武功,又不想带着整本书。

请问他至少要撕下多少张纸带走?

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

答案:

(80,81);(82,83);(84,85);(86,87);(88,89);(90,91);(92,93)

∙2.切面条 

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

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

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

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

答案是个整数,请通过浏览器提交答案。

不要填写任何多余的内容。

答案:

1025

importjava.util.Scanner;

 publicclassMain{

    publicstaticvoidmain(String[]args){

        Scannersc= newScanner(System.in);

        intn=sc.nextInt();

        intnum=(int)Math.pow(2,n)+ 1;

        System.out.println(num); //结果:

2015

    }

}

∙3.猜字母 

把abcd...s共19个字母组成的序列重复拼接106次,得到长度为2014的串。

接下来删除第1个字母(即开头的字母a),以及第3个,第5个等所有奇数位置的字母。

得到的新串再进行删除奇数位置字母的动作。

如此下去,最后只剩下一个字母,请写出该字母。

答案是一个小写字母,请通过浏览器提交答案。

不要填写任何多余的内容。

答案:

q

importjava.util.Scanner;

/**

* 该程序类似与约瑟夫环的问题

*/

publicclassMain{

publicstaticvoidmain(String[]args){

   Scanners= newScanner(System.in);

   Stringstr= "abcdefghijklmnopqrs";

   Stringstr1= "";

   for(inti= 0;i< 106;i++){

       str1=str1+str;

       }

   System.out.println(str1.length());

   boolean[]arr= newboolean[str1.length()];

   for(inti=0;i

       arr[i]= true;             //下标为TRUE时说明字母还在圈里

   }

   intleftCount=str1.length();

   intcountNum= 0;

   intindex= 0;

   while(leftCount> 1){

       if(arr[index]== true){            //当在圈里时

           if(countNum%2== 0){          //下标为偶数时

               arr[index]= false;        //该字母退出圈子

               leftCount--;              //剩余字母数目减一

               }

           countNum++;

           }

       index++;            //每报一次数,下标加一

   

       if(index==str1.length()){    //是循环数数,当下标大于n时,说明已经数了一圈,

           index= 0;                  //将下标设为零重新开始。

           countNum= 0;

           }

       }

  

   for(inti=0;i

       if(arr[i]== true){

           System.out.println(i);   //输出结果表示下标为1023(第1024个)的字母,即:

q

           }

       }

   }

}

∙4.大衍数列

标题:

大衍数列

中国古代文献中,曾记载过“大衍数列”,主要用于解释中国传统文化中的太极衍生原理。

它的前几项是:

0、2、4、8、12、18、24、32、40、50...

其规律是:

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

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

for(inti=1;i<100;i++)

{

if(i%2==0)//填空

System.out.println(i*i/2);

else

System.out.println((i*i-1)/2);}

请填写划线部分缺失的代码。

通过浏览器提交答案。

注意:

不要填写题面已有的内容,也不要填写任何说明、解释文字。

答案:

i%2== 0

∙5.圆周率 

数学发展历史上,圆周率的计算曾有许多有趣甚至是传奇的故事。

其中许多方法都涉及无穷级数。

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

下面的程序实现了该求解方法。

实际上数列的收敛对x的初始值并不敏感。

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

doublex=111;

for(intn=10000;n>=0;n--){

inti=2*n+1;

x=2+(i*i/x);

}

System.out.println(String.format("%.4f",______________));

答案:

4/(x-1)

 

∙6.奇怪的分式 

上小学的时候,小明经常自己发明新算法。

一次,老师出的题目是:

1/4乘以8/5小明居然把分子拼接在一起,分母拼接在一起,答案是:

18/45(参见图1.png)

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

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

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

显然,交换分子分母后,例如:

4/1乘以5/8是满足要求的,这算做不同的算式。

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

注意:

答案是个整数(考虑对称性,肯定是偶数)。

请通过浏览器提交。

不要书写多余的内容。

答案:

publicclassMain{

    publicstaticvoidmain(String[]args){

        intcount= 0;

        for(inta= 1;a<= 9;a++){

            for(intb= 1;b<= 9;b++){

                if(a!

=b){

                  for(intc= 1;c<= 9;c++){

                    for(intd= 1;d<= 9;d++){

                 if(c!

=d){

             doublesum1=(double)b/a*d/c;

             doublesum2=(double)(b*10+d)/(a*10+c);

                    if(sum1==sum2){

                      count++;

                         }

                            }

                        }

                    }

                }

            }

            System.out.println(count);  //输出结果:

14

        }

    }

 

}

 

/**这14组数据分别是:

 

2/1*4/5     4/1*5/8     6/1*3/4    6/1*4/6     9/1*5/9

1/2*5/4     6/2*5/6     1/4*8/5    9/4*8/9     1/6*4/3

1/6*6/4     2/6*6/5     1/9*9/5    4/9*9/8

 

PS:

这些分式具有对称性

*/

∙7.扑克序列 

AA223344,一共4对扑克牌。

请你把它们排成一行。

要求:

两个A中间有1张牌,两个2之间有2张牌,两个3之间有3张牌,两个4之间有4张牌。

4A3A2432

2342A3A4

请填写出所有符合要求的排列中,字典序最小的那个。

例如:

22AA3344比A2A23344字典序小。

当然,它们都不是满足要求的答案。

2342A3A4

请通过浏览器提交答案。

“A”一定不要用小写字母a,也不要用“1”代替。

字符间一定不要留空格。

答案:

2342A3A4

publicclass扑克序列{//这题有病,总共就两种情况,题目还给出了

    publicstaticintcount= 0;

    publicstaticvoidmain(String[]args){

        char[]num= newchar[8];

        f(num, 0);

    }

 

    publicstaticvoidf(char[]num, inti){

        if(i>=num.length){

            if(judge(num)){

                show(num);

                count++;

            }

        } else{

            for(intj= 1;j<= 4;j++){

                num[i]=(char)(j+'0');

                f(num,i+1);

            }

        }

    }

 

    publicstaticvoidshow(char[]num){

        for(inti= 0;i

            if(num[i]== '1')

                System.out.print('A');

            else

                System.out.print(num[i]);

        }

        System.out.println();

    }

 

    publicstaticbooleanjudge(char[]num){

        boolean[]bool= newboolean[5];

        intsize_A= 0,size_2= 0,size_3= 0,size_4= 0;

        for(inti= 0;i

            if(num[i]== '1'){size_A++;

                if(i+2 0&&num[i-2]==num[i])

                    bool[0]= true;

                }

            if(num[i]== '2'){size_2++;

                if(i+3 0&&num[i-3]==num[i])

                    bool[1]= true;

                }

            if(num[i]== '3'){size_3++;

                if(i+4 0&&num[i-4]==num[i])

                    bool[2]= true;

                }

            if(num[i]== '4'){size_4++;

                if(i+5 0&&num[i-5]==num[i])

                    bool[3]= true;

                }

            }

        if(size_A== 2&&size_3== 2&&size_2== 2&&size_4== 2){

            bool[4]= true;

        }

        returnbool[0]&&bool[1]&&bool[2]&&bool[3]&&bool[4];

    }

}

∙8.分糖果 

有n个小朋友围坐成一圈。

老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏:

每个小朋友都把自己的糖果分一半给左手边的孩子。

一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数。

反复进行这个游戏,直到所有小朋友的糖果数都相同为止。

你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果。

【格式要求】

程序首先读入一个整数N(2

接着是一行用空格分开的N个偶数(每个偶数不大于1000,不小于2)

要求程序输出一个整数,表示老师需要补发的糖果数。

例如:

输入

3

224

程序应该输出:

4

资源约定:

峰值内存消耗(含虚拟机)<256M

CPU消耗<1000ms

 

请严格按要求输出,不要画蛇添足地打印类似:

“请您输入...”的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

注意:

不要使用package语句。

不要使用jdk1.7及以上版本的特性。

注意:

主类的名字必须是:

Main,否则按无效代码处理。

答案:

importjava.util.Scanner; //求测试是否正确

publicclassMain{

    publicstaticvoidmain(Stringargs[]){

        Scannersc=newScanner(System.in);

        intn=sc.nextInt();

        inta=0,b=0,count=0,x=0;

        ints[]=newint[n];

        for(a=0;a

            s[a]=sc.nextInt();

        }

        sc.close();

        for(;;){

            for(a=0;a

                s[a]=s[a]/2;

            }

            b=s[0];//变化前的第一个小朋友手里的糖果的一半保留

            for(a=0;a

                s[a]=s[a]+s[a+1];

            }

            s[n-1]=s[n-1]+b;//将第一个小朋友的糖果给最后一个小朋友

            for(a=0,x=0;a

                if(s[a]%2!

=0){

                    s[a]=s[a]+1;

                    count++;

                }

                else{

                    x++;

                }

            }

            for(a=0;a

                if(s[a]!

=s[a+1]){

                    x=0;

                }

            }

            if(x==n){

                System.out.println(count);

                break;

            }

             

        }

    }

}

∙9.地宫取宝

X国王有一个地宫宝库。

是nxm个格子的矩阵。

每个格子放一件宝贝。

每个宝贝贴着价值标签。

地宫的入口在左上角,出口在右下角。

小明被带到地宫的入口,国王要求他只能向右或向下行走。

走过某个格子时,如果那个格子中的宝贝价值比小明手中任意宝贝价值都大,小明就可以拿起它(当然,也可以不拿)。

当小明走到出口时,如果他手中的宝贝恰好是k件,则这些宝贝就可以送给小明。

请你帮小明算一算,在给定的局面下,他有多少种不同的行动方案能获得这k件宝贝。

【数据格式】

输入一行3个整数,用空格分开:

nmk(1<=n,m<=50,1<=k<=12)

接下来有n行数据,每行有m个整数Ci(0<=Ci<=12)代表这个格子上的宝物的价值

要求输出一个整数,表示正好取k个宝贝的行动方案数。

该数字可能很大,输出它对1000000007取模的结果。

例如,输入:

222

12

21

程序应该输出:

2

再例如,输入:

232

123

215

程序应该输出:

14

资源约定:

峰值内存消耗(含虚拟机)<256M

CPU消耗<2000ms

 

请严格按要求输出,不要画蛇添足地打印类似:

“请您输入...”的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

注意:

不要使用package语句。

不要使用jdk1.7及以上版本的特性。

注意:

主类的名字必须是:

Main,否则按无效代码处理。

∙10.矩阵翻硬币 

小明先把硬币摆成了一个n行m列的矩阵。

随后,小明对每一个硬币分别进行一次Q操作。

对第x行第y列的硬币进行Q操作的定义:

将所有第i*x行,第j*y列的硬币进行翻转。

其中i和j为任意使操作可行的正整数,行号和列号都是从1开始。

当小明对所有硬币都进行了一次Q操作后,他发现了一个奇迹——所有硬币均为正面朝上。

小明想知道最开始有多少枚硬币是反面朝上的。

于是,他向他的好朋友小M寻求帮助。

聪明的小M告诉小明,只需要对所有硬币再进行一次Q操作,即可恢复到最开始的状态。

然而小明很懒,不愿意照做。

于是小明希望你给出他更好的方法。

帮他计算出答案。

【数据格式】

输入数据包含一行,两个正整数nm,含义见题目描述。

输出一个正整数,表示最开始有多少枚硬币是反面朝上的。

【样例输入】

23

【样例输出】

1

【数据规模】

对于10%的数据,n、m<=10^3;

对于20%的数据,n、m<=10^7;

对于40%的数据,n、m<=10^15;

对于10%的数据,n、m<=10^1000(10的1000次方)。

资源约定:

峰值内存消耗(含虚拟机)<256M

CPU消耗<2000ms

 

请严格按要求输出,不要画蛇添足地打印类似:

“请您输入...”的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

注意:

不要使用package语句。

不要使用jdk1.7及以上版本的特性。

注意:

主类的名字必须是:

Main,否则按无效代码处理。

答案:

importjava.util.Scanner;

 publicclass矩阵翻硬币{

    publicstaticvoidmain(String[]args){

        Scannerreader= newScanner(System.in);

        intn=reader.nextInt();

        intm=reader.nextInt();

        reader.close();

        intcount= 0;

        int[][]num= newint[n][m];

        for(inti= 0;i

            for(intj= 0;j

                num[i][j]= 1;

            }

        }

        for(inti= 0;i

            for(intj= 0;j

                Q(num,i+1,j+1);

            }

        }

        for(inti= 0;i

            for(intj= 0;j

                if(num[i][j]==-1){

     

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2