2015年 第06届 蓝桥杯 Java B组 决赛真题详解及小结
- 藍橋杯 Java B組 省賽決賽 真題詳解及小結匯總【2013年(第4屆)~2020年(第11屆)】
- 第11屆 藍橋杯-第1、2次模擬(軟件類)真題-(2020年3月、4月)-官方講解視頻
- 說明:大部分題解思路及程序代碼 源自?藍橋杯 官網視頻(Java B組歷年真題解析)?——?鄭未老師。
目? ?錄
一、分機號
二、五星填數
三、顯示二叉樹
四、穿越雷區
五、表格計算
六、鋪瓷磚
小結
一、分機號
標題:分機號
X老板脾氣古怪,他們公司的電話分機號都是3位數,老板規定,所有號碼必須是降序排列,且不能有重復的數位。比如:
751,520,321 都滿足要求,而,
766,918,201 就不符合要求。
現在請你計算一下,按照這樣的規定,一共有多少個可用的3位分機號碼?
請直接提交該數字,不要填寫任何多余的內容。
?
?
二、五星填數
標題:五星填數
如【圖1.png】的五星圖案節點填上數字:1~12,除去7和11。
要求每條直線上數字和相等。
如圖就是恰當的填法。
請你利用計算機搜索所有可能的填法有多少種。
注意:旋轉或鏡像后相同的算同一種填法。
請提交表示方案數目的整數,不要填寫任何其它內容。
圖1.png?
三、顯示二叉樹
標題:顯示二叉樹
排序二叉樹的特征是:
某個節點的左子樹的所有節點值都不大于本節點值。
某個節點的右子樹的所有節點值都不小于本節點值。
為了能形象地觀察二叉樹的建立過程,小明寫了一段程序來顯示出二叉樹的結構來。
class BiTree
{
?? ?private int v;
?? ?private BiTree l;
?? ?private BiTree r;
?? ?
?? ?public BiTree(int v){
?? ??? ?this.v = v;
?? ?}
?? ?
?? ?public void add(BiTree the){
?? ??? ?if(the.v < v){
?? ??? ??? ?if(l==null) l = the;
?? ??? ??? ?else l.add(the);
?? ??? ?}
?? ??? ?else{
?? ??? ??? ?if(r==null) r = the;
?? ??? ??? ?else r.add(the);
?? ??? ?}
?? ?}
?? ?
?? ?public int getHeight(){
?? ??? ?int h = 2;
?? ??? ?int hl = l==null? 0 : l.getHeight();
?? ??? ?int hr = r==null? 0 : r.getHeight();
?? ??? ?return h + Math.max(hl,hr);
?? ?}
?? ?
?? ?public int getWidth(){
?? ??? ?int w = (""+v).length();
?? ??? ?if(l!=null) w += l.getWidth();
?? ??? ?if(r!=null) w += r.getWidth();
?? ??? ?return w;
?? ?}
?? ?
?? ?public void show(){
?? ??? ?char[][] buf = new char[getHeight()][getWidth()];
?? ??? ?printInBuf(buf, 0, 0);
?? ??? ?showBuf(buf);
?? ?}
?? ?
?? ?private void showBuf(char[][] x){
?? ??? ?for(int i=0; i<x.length; i++){
?? ??? ??? ?for(int j=0; j<x[i].length; j++)
?? ??? ??? ??? ?System.out.print(x[i][j]==0? ' ':x[i][j]);
?? ??? ??? ?System.out.println();
?? ??? ?}
?? ?}
?? ?
?? ?private void printInBuf(char[][] buf, int x, int y){
?? ??? ?String sv = "" + v;
?? ??? ?
?? ??? ?int p1 = l==null? x : l.getRootPos(x);
?? ??? ?int p2 = getRootPos(x);
?? ??? ?int p3 = r==null? p2 : r.getRootPos(p2+sv.length());
?? ??? ?
?? ??? ?buf[y][p2] = '|';
?? ??? ?for(int i=p1; i<=p3; i++) buf[y+1][i]='-';
?? ??? ?for(int i=0; i<sv.length(); i++) ________________________________; ?//填空位置
?? ??? ?if(p1<p2) buf[y+1][p1] = '/';
?? ??? ?if(p3>p2) buf[y+1][p3] = '\\';
?? ??? ?
?? ??? ?if(l!=null) l.printInBuf(buf,x,y+2);
?? ??? ?if(r!=null) r.printInBuf(buf,p2+sv.length(),y+2);
?? ?}
?? ?
?? ?private int getRootPos(int x){
?? ??? ?return l==null? x : x + l.getWidth();
?? ?}
}
public class Main
{
?? ?public static void main(String[] args)
?? ?{?? ??? ?
?? ??? ?BiTree tree = new BiTree(500);
?? ??? ?tree.add(new BiTree(200));
?? ??? ?tree.add(new BiTree(509));
?? ??? ?tree.add(new BiTree(100));
?? ??? ?tree.add(new BiTree(250));
?? ??? ?tree.add(new BiTree(507));
?? ??? ?tree.add(new BiTree(600));
?? ??? ?tree.add(new BiTree(650));
?? ??? ?tree.add(new BiTree(450));
?? ??? ?tree.add(new BiTree(510));
?? ??? ?tree.add(new BiTree(440));
?? ??? ?tree.add(new BiTree(220));?? ??? ?
?? ??? ?tree.show();?? ??? ?
?? ?}
}
對于上邊的測試數據,應該顯示出:
? ? ? ? ? ? ? ? ? |
? ?/--------------500---\
? ?| ? ? ? ? ? ? ? ? ? ?|
/--200---\ ? ? ? ? ? /--509---\
| ? ? ? ?| ? ? ? ? ? | ? ? ? ?|
100 ? /--250---\ ? ? 507 ? /--600\
? ? ? | ? ? ? ?| ? ? ? ? ? | ? ? |
? ? ? 220 ? /--450 ? ? ? ? 510 ? 650
? ? ? ? ? ? |
? ? ? ? ? ? 440
(如有對齊問題,請參考【圖1.png】)
請分析程序邏輯,填寫劃線部分缺失的代碼。
注意,只填寫缺少的部分,不要填寫已有的代碼或符號,也不要加任何說明文字。
圖1.png?
四、穿越雷區
標題:穿越雷區
X星的坦克戰車很奇怪,它必須交替地穿越正能量輻射區和負能量輻射區才能保持正常運轉,否則將報廢。
某坦克需要從A區到B區去(A,B區本身是安全區,沒有正能量或負能量特征),怎樣走才能路徑最短?
已知的地圖是一個方陣,上面用字母標出了A,B區,其它區都標了正號或負號分別表示正負能量輻射區。
例如:
A + - + -
- + - - +
- + + + -
+ - + - +
B + - + -
坦克車只能水平或垂直方向上移動到相鄰的區。
數據格式要求:
輸入第一行是一個整數n,表示方陣的大小, 4<=n<100
接下來是n行,每行有n個數據,可能是A,B,+,-中的某一個,中間用空格分開。
A,B都只出現一次。
要求輸出一個整數,表示坦克從A區到B區的最少移動步數。
如果沒有方案,則輸出-1
例如:
用戶輸入:
5
A + - + -
- + - - +
- + + + -
+ - + - +
B + - + -
則程序應該輸出:
10
資源約定:
峰值內存消耗(含虛擬機) < 512M
CPU消耗 ?< 2000ms
請嚴格按要求輸出,不要畫蛇添足地打印類似:“請您輸入...” 的多余內容。
所有代碼放在同一個源文件中,調試通過后,拷貝提交該源碼。
注意:不要使用package語句。不要使用jdk1.7及以上版本的特性。
注意:主類的名字必須是:Main,否則按無效代碼處理。
?
五、表格計算
標題:表格計算
某次無聊中, atm 發現了一個很老的程序。這個程序的功能類似于 Excel ,它對一個表格進行操作。
不妨設表格有 n 行,每行有 m 個格子。
每個格子的內容可以是一個正整數,也可以是一個公式。
公式包括三種:
1. SUM(x1,y1:x2,y2) 表示求左上角是第 x1 行第 y1 個格子,右下角是第 x2 行第 y2 個格子這個矩形內所有格子的值的和。
2. AVG(x1,y1:x2,y2) 表示求左上角是第 x1 行第 y1 個格子,右下角是第 x2 行第 y2 個格子這個矩形內所有格子的值的平均數。
3. STD(x1,y1:x2,y2) 表示求左上角是第 x1 行第 y1 個格子,右下角是第 x2 行第 y2 個格子這個矩形內所有格子的值的標準差。
標準差即為方差的平方根。
方差就是:每個數據與平均值的差的平方的平均值,用來衡量單個數據離開平均數的程度。
公式都不會出現嵌套。
如果這個格子內是一個數,則這個格子的值等于這個數,否則這個格子的值等于格子公式求值結果。
輸入這個表格后,程序會輸出每個格子的值。atm 覺得這個程序很好玩,他也想實現一下這個程序。
「輸入格式」
第一行兩個數 n, m 。
接下來 n 行輸入一個表格。每行 m 個由空格隔開的字符串,分別表示對應格子的內容。
輸入保證不會出現循環依賴的情況,即不會出現兩個格子 a 和 b 使得 a 的值依賴 b 的值且 b 的值依賴 a 的值。
「輸出格式」
輸出一個表格,共 n 行,每行 m 個保留兩位小數的實數。
數據保證不會有格子的值超過 1e6 。
「樣例輸入」
3 2
1 SUM(2,1:3,1)
2 AVG(1,1:1,2)
SUM(1,1:2,1) STD(1,1:2,2)
「樣例輸出」
1.00 5.00
2.00 3.00
3.00 1.48
「數據范圍」
對于 30% 的數據,滿足: n, m <= 5
對于 100% 的數據,滿足: n, m <= 50
資源約定:
峰值內存消耗(含虛擬機) < 512M
CPU消耗 ?< 2000ms
請嚴格按要求輸出,不要畫蛇添足地打印類似:“請您輸入...” 的多余內容。
所有代碼放在同一個源文件中,調試通過后,拷貝提交該源碼。
注意:不要使用package語句。不要使用jdk1.7及以上版本的特性。
注意:主類的名字必須是:Main,否則按無效代碼處理。
?
六、鋪瓷磚
標題:鋪瓷磚
為了讓藍橋杯競賽更順利的進行,主辦方決定給競賽的機房重新鋪放瓷磚。機房可以看成一個n*m的矩形,而這次使用的瓷磚比較特別,有兩種形狀,如【圖1.png】所示。在鋪放瓷磚時,可以旋轉。
?
主辦方想知道,如果使用這兩種瓷磚把機房鋪滿,有多少種方案。
【輸入格式】
輸入的第一行包含兩個整數,分別表示機房兩個方向的長度。
【輸出格式】
輸出一個整數,表示可行的方案數。這個數可能很大,請輸出這個數除以65521的余數。
【樣例輸入1】
4 4
【樣例輸出1】
2
【樣例說明1】
這兩種方案如下【圖2.png】所示:
?
【樣例輸入2】
2 6
【樣例輸出2】
4
【數據規模與約定】
對于20%的數據,1<=n, m<=5。
對于50%的數據,1<=n<=100,1<=m<=5。
對于100%的數據,1<=n<=10^15,1<=m<=6。
?
資源約定:
峰值內存消耗(含虛擬機) < 512M
CPU消耗 ?< 8000ms
請嚴格按要求輸出,不要畫蛇添足地打印類似:“請您輸入...” 的多余內容。
所有代碼放在同一個源文件中,調試通過后,拷貝提交該源碼。
注意:不要使用package語句。不要使用jdk1.7及以上版本的特性。
注意:主類的名字必須是:Main,否則按無效代碼處理。
? ?
? ? ? ? ? ? ? ? ? ? ? 圖1.png? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖2.png
?
小結
加油!
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的2015年 第06届 蓝桥杯 Java B组 决赛真题详解及小结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2016年 第07届 蓝桥杯 Java
- 下一篇: Java连接SQL Server 201