2015年第六届蓝桥杯决赛Java本科B组试题解析

 

 

第一题

 1 标题:分机号
 2 
 3 X老板脾气古怪,他们公司的电话分机号都是3位数,老板规定,所有号码必须是降序排列,且不能有重复的数位。比如:
 4 
 5 751,520,321 都满足要求,而,
 6 766,918,201 就不符合要求。
 7 
 8 现在请你计算一下,按照这样的规定,一共有多少个可用的3位分机号码?
 9 
10 请直接提交该数字,不要填写任何多余的内容。

 

 

第二题

 1 标题:五星填数
 2 
 3 如【图1.png】的五星图案节点填上数字:1~12,除去7和11。
 4 要求每条直线上数字和相等。
 5 
 6 如图就是恰当的填法。
 7 
 8 请你利用计算机搜索所有可能的填法有多少种。
 9 注意:旋转或镜像后相同的算同一种填法。
10 
11 请提交表示方案数目的整数,不要填写任何其它内容。

2015年第六届蓝桥杯决赛Java本科B组试题解析

 

 

 

第三题  

  1 标题:显示二叉树
  2 
  3 排序二叉树的特征是:
  4 某个节点的左子树的所有节点值都不大于本节点值。
  5 某个节点的右子树的所有节点值都不小于本节点值。
  6 
  7 为了能形象地观察二叉树的建立过程,小明写了一段程序来显示出二叉树的结构来。
  8 
  9 
 10 class BiTree
 11 {
 12     private int v;
 13     private BiTree l;
 14     private BiTree r;
 15     
 16     public BiTree(int v){
 17         this.v = v;
 18     }
 19     
 20     public void add(BiTree the){
 21         if(the.v < v){
 22             if(l==null) l = the;
 23             else l.add(the);
 24         }
 25         else{
 26             if(r==null) r = the;
 27             else r.add(the);
 28         }
 29     }
 30     
 31     public int getHeight(){
 32         int h = 2;
 33         int hl = l==null? 0 : l.getHeight();
 34         int hr = r==null? 0 : r.getHeight();
 35         return h + Math.max(hl,hr);
 36     }
 37     
 38     public int getWidth(){
 39         int w = (""+v).length();
 40         if(l!=null) w += l.getWidth();
 41         if(r!=null) w += r.getWidth();
 42         return w;
 43     }
 44     
 45     public void show(){
 46         char[][] buf = new char[getHeight()][getWidth()];
 47         printInBuf(buf, 0, 0);
 48         showBuf(buf);
 49     }
 50     
 51     private void showBuf(char[][] x){
 52         for(int i=0; i<x.length; i++){
 53             for(int j=0; j<x[i].length; j++)
 54                 System.out.print(x[i][j]==0? ' ':x[i][j]);
 55             System.out.println();
 56         }
 57     }
 58     
 59     private void printInBuf(char[][] buf, int x, int y){
 60         String sv = "" + v;
 61         
 62         int p1 = l==null? x : l.getRootPos(x);
 63         int p2 = getRootPos(x);
 64         int p3 = r==null? p2 : r.getRootPos(p2+sv.length());
 65         
 66         buf[y][p2] = '|';
 67         for(int i=p1; i<=p3; i++) buf[y+1][i]='-';
 68         for(int i=0; i<sv.length(); i++) ________________________________;  //填空位置
 69         if(p1<p2) buf[y+1][p1] = '/';
 70         if(p3>p2) buf[y+1][p3] = '\\';
 71         
 72         if(l!=null) l.printInBuf(buf,x,y+2);
 73         if(r!=null) r.printInBuf(buf,p2+sv.length(),y+2);
 74     }
 75     
 76     private int getRootPos(int x){
 77         return l==null? x : x + l.getWidth();
 78     }
 79 }
 80 
 81 public class Main
 82 {
 83     public static void main(String[] args)
 84     {        
 85         BiTree tree = new BiTree(500);
 86         tree.add(new BiTree(200));
 87         tree.add(new BiTree(509));
 88         tree.add(new BiTree(100));
 89         tree.add(new BiTree(250));
 90         tree.add(new BiTree(507));
 91         tree.add(new BiTree(600));
 92         tree.add(new BiTree(650));
 93         tree.add(new BiTree(450));
 94         tree.add(new BiTree(510));
 95         tree.add(new BiTree(440));
 96         tree.add(new BiTree(220));        
 97         tree.show();        
 98     }
 99 }
100 
101 对于上边的测试数据,应该显示出:
102                   |
103    /--------------500---\
104    |                    |
105 /--200---\           /--509---\
106 |        |           |        |
107 100   /--250---\     507   /--600\
108       |        |           |     |
109       220   /--450         510   650
110             |
111             440
112 
113 (如有对齐问题,请参考【图1.png】)
114 
115 请分析程序逻辑,填写划线部分缺失的代码。
116 
117 注意,只填写缺少的部分,不要填写已有的代码或符号,也不要加任何说明文字。

2015年第六届蓝桥杯决赛Java本科B组试题解析

 

上一篇:PHP实现 二叉查找树


下一篇:Redis事务详解