2013蓝桥杯java试题_2013年第四届蓝桥杯决赛Java本科B组试题解析

本文详细解析了2013年第四届蓝桥杯决赛Java本科B组的两道编程题——猜灯谜和连续奇数和。通过暴力法分别求解了猜灯谜问题的答案和111立方的连续奇数和起始数字,并提供了完整的Java代码实现。
摘要由CSDN通过智能技术生成

题目及解析如下:

题目大致介绍:

一共只有五道题

第一题和第二题是结果填空,方法不限只要得到最后结果就行

第三题是代码填空题,主要考察算法基本功和编程基本功

第四题到第六题是编程题,要求编程解决问题

第一题  猜灯谜

题目:

1 标题:猜灯谜2

3 A 村的元宵节灯会上有一迷题:4

5 请猜谜 * 请猜谜 =请边赏灯边猜6

7 小明想,一定是每个汉字代表一个数字,不同的汉字代表不同的数字。8

9 请你用计算机按小明的思路算一下,然后提交“请猜谜”三个字所代表的整数即可。10

11 请严格按照格式,通过浏览器提交答案。12 注意:只提交一个3位的整数,不要写其它附加内容,比如:说明性的文字。

思路:直接暴力法干

1 //answer: 897

2

3 public classt1 {4

5 public static voidmain(String[] args) {6

7 inta, b, c, s, m, n;8

9 for (a = 1; a <= 9; a++) {10 for (b = 0; b <= 9; b++) {11 if(a!=b)12 for (c = 0; c <= 9; c++) {13 if(a!=c && b!=c)14 for (s = 0; s < 9; s++) {15 if(a!=s && b!=s && c!=s)16 for (m = 0; m < 9; m++) {17 if(a!=m && b!=m && c!=m &&s!=m)18 for (n = 0; n < 9; n++) {19 if(a!=n && b!=n && c!=n &&s!=n && m!=n) {20 int i = a * 100 + b * 10 +c;21 int j = a * 100000 + s * 10000 + m * 1000 + n * 100 + s * 10 +b;22 if(i * i ==j ) {23 System.out.println(i + " " +j);24 }25 }26 }27 }28 }29 }30 }31 }32

33 }34

35 }

第二题  连续奇数和

题目:

1 标题:连续奇数和2

3 小明看到一本书上写着:任何数字的立方都可以表示为连续奇数的和。4

5 比如:6

7   2^3 = 8 = 3 + 5

8   3^3 = 27 = 7 + 9 + 11

9   4^3 = 64 = 1 + 3 + ... + 15

10

11 虽然他没有想出怎么证明,但他想通过计算机进行验证。12

13 请你帮助小明写出 111的立方之连续奇数和表示法的起始数字。如果有多个表示方案,选择起始数字小的方案。14

15 请严格按照要求,通过浏览器提交答案。16 注意:只提交一个整数,不要写其它附加内容,比如:说明性的文字。

思路:也是暴力法直接干就完了,最后注意验算一下

1 public classt2 {2

3 public static voidmain(String[] args) {4

5 //System.out.println(111*111*111);//1367631

6

7 for(int i = 1; i<=136763 ;i+=2) {8 int sum = 0;9 int cur =i;10 while(sum <= 1367631) {11 if(sum==1367631) {12 System.out.println(i);13 }14 sum +=cur;15 cur += 2;16 }17

18 }19 //上面的代码算出来是371 下面进行一下验算20 //test

21 System.out.println("=====================");22 int s = 0;23 for(int j=371; s!=1367631; j+=2) {24 s +=j;25 //System.out.println(j);

26 }27 System.out.println(s);28 }29

30 }

第三题  快速排序

题目:

1 标题:快速排序2

3 快速排序算法是典型的分治思想的运用。它使用某个key把全部元素分成两组,其中一组的元素不大于另一组。然后对这两组再次进行递归排序。4

5 以下代码实现了快速排序。请仔细阅读代码,填写缺少代码的部分。6

7 static void f(int[] x, int left, intright)8 {9 if(left >= right) return;10

11 int key = x[(left+right)/2];12

13 int li =left;14 int ri =right;15 while(li<=ri){16 while(x[ri]>key) ri--;17 while(x[li]

19 if(________________){ //填空位置

20 int t =x[li];21 x[li] =x[ri];22 x[ri] =t;23 li++;24 ri--;25 }26 }27

28 if(li left) f(x, left, ri);30 }31

32 请分析代码逻辑,并推测划线处的代码,通过网页提交。33 注意:仅把缺少的代码作为答案,千万不要填写多余的代码、符号或说明文字!!

经典快排的实现,代码如下:

1 //快速排序

2

3 public classt3 {4

5 static void f(int[] x, int left, intright)6 {7 if(left >= right) return;8

9 int key = x[(left+right)/2];10

11 int li =left;12 int ri =right;13 while(li<=ri){14 while(x[ri]>key) ri--;15 while(x[li]

17 if(li <= ri){ //填空位置

18 int t =x[li];19 x[li] =x[ri];20 x[ri] =t;21 li++;22 ri--;23 }24 }25

26 if(li left) f(x, left, ri);28 }29

30 public static voidmain(String[] args) {31

32 int[] arr = {3, 5, 1 ,2 , 6, 8, 7};33 f(arr, 0, arr.length-1);34 for(int i=0; i

38 }39

40 }

第四题  九宫重排

题目如下:

如图1的九宫格中,放着 1~8 的数字卡片,还有一个格子空着。与空格子相邻的格子中的卡片可以移动到空格中。经过若干次移动,可以形成图2所示的局面。

我们把图1的局面记为:12345678. 把图2的局面记为:123.46758

012592d4de675fdcd1a9c03c8a5c6e0a.png

0f3c394cb836977eb7db93aff485ef18.png

显然是按从上到下,从左到右的顺序记录数字,空格记为句点。

本题目的任务是已知九宫的初态和终态,求最少经过多少步的移动可以到达。如果无论多少步都无法到达,则输出-1。

例如:

输入数据为:

12345678.

123.46758

则,程序应该输出:

3

再如:

输入:

13524678.

46758123.

则,程序输出:

22

资源约定:

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

CPU消耗 < 2000ms

请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

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

注意:不要使用package语句。不要使用jdk1.6及以上版本的特性。

注意:主类的名字必须是:Main,否则按无效代码处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值