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


    题目及解析如下:

    题目大致介绍:

    一共只有五道题

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

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

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

    第一题  猜灯谜

    题目:

     1 标题:猜灯谜
     2 
     3     A 村的元宵节灯会上有一迷题:
     4 
     5     请猜谜 * 请猜谜 = 请边赏灯边猜
     6     
     7     小明想,一定是每个汉字代表一个数字,不同的汉字代表不同的数字。
     8     
     9     请你用计算机按小明的思路算一下,然后提交“请猜谜”三个字所代表的整数即可。
    10 
    11     请严格按照格式,通过浏览器提交答案。
    12     注意:只提交一个3位的整数,不要写其它附加内容,比如:说明性的文字。

    思路:直接暴力法干

     1 // answer: 897
     2 
     3 public class t1 {
     4 
     5     public static void main(String[] args) {
     6 
     7         int a, 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 class t2 {
     2     
     3     public static void main(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, int right)
     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]<key) li++;
    18         
    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 < right) f(x, li, right);
    29     if(ri > left) f(x, left, ri);
    30 }
    31 
    32     请分析代码逻辑,并推测划线处的代码,通过网页提交。
    33     注意:仅把缺少的代码作为答案,千万不要填写多余的代码、符号或说明文字!!

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

     1 // 快速排序
     2 
     3 public class t3 {
     4     
     5     static void f(int[] x, int left, int right)
     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]<key) li++;
    16             
    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 < right) f(x, li, right);
    27         if(ri > left) f(x, left, ri);
    28     }
    29     
    30     public static void main(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<arr.length; i++) {
    35             System.out.println(arr[i]);
    36         }
    37         
    38     }
    39     
    40 }

    第四题  九宫重排

    题目如下:

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

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

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

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

    例如:
    输入数据为:
    12345678.
    123.46758
    则,程序应该输出:
    3

    再如:
    输入:
    13524678.
    46758123.
    则,程序输出:
    22


    资源约定:
    峰值内存消耗(含虚拟机) < 64M
    CPU消耗 < 2000ms


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

    所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
    注意:不要使用package语句。不要使用jdk1.6及以上版本的特性。
    注意:主类的名字必须是:Main,否则按无效代码处理。

  • 相关阅读:
    SpringBoot接收前端参数的三种方法
    拉姆达表达式入门
    Can not issue data manipulation statements with executeQuery()错误解决
    executing an update/delete query问题
    syntax error, error in :'e id=1?', expect QUES, actual QUES pos 66, line 1, column 66, token QUES错误
    SpringDataJpa错误
    No identifier specified for entity: XXXX 错误
    An entity cannot be annotated with both @Entity and @MappedSuperclass: com.example1.demo1.Entity.User错误
    org.hibernate.AnnotationException: No identifier specified for entity: com.example1.demo1.Entity.User错误
    base64转图片
  • 原文地址:https://www.cnblogs.com/wyb666/p/10859570.html
Copyright © 2020-2023  润新知