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