2012年 藍橋杯預賽 java 本科
考生須知:
l 考試時間為4小時。
l 參賽選手切勿修改機器自動生成的【考生資料夾】的名稱或刪除任何自動生成的檔案或目錄,否則會干擾考試系統正確採集您的解答。
l 參賽選手切勿在提交的程式碼中書寫“姓名”、“考號”,“院校名”等身份資訊或其它與競賽題目無關的內容,否則成績無效。
l 試題包含三種型別:“結果填空”、“程式碼填空”與“程式設計”,總計100分。
結果填空:3+5+4+9 = 21分
程式碼填空:5+6+8 = 19 分
程式設計:11+21+28 = 60分
結果填空要求參賽選手根據題目描述直接填寫結果。求解方式不限。不要求原始碼。
把答案存入【考生資料夾】下對應題號的“解答.txt”中即可。
程式碼填空題要求參賽選手在弄清給定程式碼工作原理的基礎上填寫缺失的部分,使得程式邏輯正確、完整。所填寫的程式碼不超過一條語句(即中間不能出現分號)。
把填空的答案(僅填空處的答案,不包括題面已存在的程式碼)存入【考生資料夾】下對應題號的“解答.txt”中即可。
程式設計題要求選手設計的程式對於給定的輸入能給出正確的輸出結果。考生的程式只有能執行出正確結果的時候才有機會得分。注意:在評卷時使用的輸入資料與試卷中給出的例項資料可能是不同的。選手的程式必須是通用的,不能只對試卷中給定的資料有效。
對每個程式設計題目,要求考生把所有類寫在一個檔案中。除錯好後,存入與【考生資料夾】下對應題號的“解答.txt”中即可,相關的工程檔案不要拷入。請不要使用package語句。
源程式中只能出現JDK1.5中允許的語法或呼叫。不能使用1.6或更高版本。
1.結果填空 (滿分3分)
題目在【考生資料夾】下對應題號的“題目.rar”中,請先解壓該檔案。
解壓密碼以考場公佈為準。
把答案存入【考生資料夾】下對應題號的“解答.txt”中即可。直接寫在題面中不能得分。如果有多個答案,每個答案佔一行。
2.結果填空 (滿分5分)
題目在【考生資料夾】下對應題號的“題目.rar”中,請先解壓該檔案。
解壓密碼以考場公佈為準。
把答案存入【考生資料夾】下對應題號的“解答.txt”中即可。直接寫在題面中不能得分。如果有多個答案,每個答案佔一行。
3.結果填空 (滿分4分)
題目在【考生資料夾】下對應題號的“題目.rar”中,請先解壓該檔案。
解壓密碼以考場公佈為準。
把答案存入【考生資料夾】下對應題號的“解答.txt”中即可。直接寫在題面中不能得分。如果有多個答案,每個答案佔一行。
4.結果填空 (滿分9分)
題目在【考生資料夾】下對應題號的“題目.rar”中,請先解壓該檔案。
解壓密碼以考場公佈為準。
把答案存入【考生資料夾】下對應題號的“解答.txt”中即可。直接寫在題面中不能得分。如果有多個答案,每個答案佔一行。
5.程式碼填空 (滿分5分)
題目在【考生資料夾】下對應題號的“題目.rar”中,請先解壓該檔案。
解壓密碼以考場公佈為準。
仔細閱讀和除錯題目提供的原始碼,根據要求填寫缺失的程式碼部分。
注意:請把填空的答案(僅填空處的答案,不包括題面)存入【考生資料夾】下對應題號的“解答.txt”中即可。直接寫在題面中不能得分。
填空內容不能超過一條語句(即中間不會含有分號)。
6.程式碼填空 (滿分6分)
題目在【考生資料夾】下對應題號的“題目.rar”中,請先解壓該檔案。
解壓密碼以考場公佈為準。
仔細閱讀和除錯題目提供的原始碼,根據要求填寫缺失的程式碼部分。
注意:請把填空的答案(僅填空處的答案,不包括題面)存入【考生資料夾】下對應題號的“解答.txt”中即可。直接寫在題面中不能得分。
填空內容不能超過一條語句(即中間不會含有分號)。
7.程式碼填空 (滿分8分)
題目在【考生資料夾】下對應題號的“題目.rar”中,請先解壓該檔案。
解壓密碼以考場公佈為準。
仔細閱讀和除錯題目提供的原始碼,根據要求填寫缺失的程式碼部分。
注意:請把填空的答案(僅填空處的答案,不包括題面)存入【考生資料夾】下對應題號的“解答.txt”中即可。直接寫在題面中不能得分。
填空內容不能超過一條語句(即中間不會含有分號)。
8.程式設計(滿分11分)
題目在考生資料夾下對應題號的“題目.rar”中,請先解壓該檔案。
解壓密碼以考場公佈為準。
仔細閱讀題目要求,根據題意編寫除錯程式碼。
要求考生把所有類寫在一個檔案中。除錯好後,存入與【考生資料夾】下對應題號的“解答.txt”中即可。相關的工程檔案不要拷入。請不要使用package語句。
另外,源程式中只能出現JDK1.5中允許的語法或呼叫。不能使用1.6或更高版本。
9.程式設計(滿分21分)
題目在考生資料夾下對應題號的“題目.rar”中,請先解壓該檔案。
解壓密碼以考場公佈為準。
仔細閱讀題目要求,根據題意編寫除錯程式碼。
要求考生把所有類寫在一個檔案中。除錯好後,存入與【考生資料夾】下對應題號的“解答.txt”中即可。相關的工程檔案不要拷入。請不要使用package語句。
另外,源程式中只能出現JDK1.5中允許的語法或呼叫。不能使用1.6或更高版本。
10. 程式設計(滿分28分)
題目在考生資料夾下對應題號的“題目.rar”中,請先解壓該檔案。
解壓密碼以考場公佈為準。
仔細閱讀題目要求,根據題意編寫除錯程式碼。
要求考生把所有類寫在一個檔案中。除錯好後,存入與【考生資料夾】下對應題號的“解答.txt”中即可。相關的工程檔案不要拷入。請不要使用package語句。
另外,源程式中只能出現JDK1.5中允許的語法或呼叫。不能使用1.6或更高版本。
1.
黃金分割數0.618與美學有重要的關係。舞臺上報幕員所站的位置大約就是舞臺寬度的0.618處,牆上的畫像一般也掛在房間高度的0.618處,甚至股票的波動據說也能找到0.618的影子....
黃金分割數是個無理數,也就是無法表示為兩個整數的比值。0.618只是它的近似值,其真值可以通過對5開方減去1再除以2來獲得,我們取它的一個較精確的近似值:0.618034
有趣的是,一些簡單的數列中也會包含這個無理數,這很令數學家震驚!
1 3 4 7 11 18 29 47 .... 稱為“魯卡斯佇列”。它後面的每一個項都是前邊兩項的和。
如果觀察前後兩項的比值,即:1/3,3/4,4/7,7/11,11/18 ... 會發現它越來越接近於黃金分割數!
你的任務就是計算出從哪一項開始,這個比值四捨五入後已經達到了與0.618034一致的精度。
請寫出該比值。格式是:分子/分母。比如:29/47
答案寫在“解答.txt”中,不要寫在這裡!
2.
有一群海盜(不多於20人),在船上比拼酒量。過程如下:開啟一瓶酒,所有在場的人平分喝下,有幾個人倒下了。再開啟一瓶酒平分,又有倒下的,再次重複...... 直到開了第4瓶酒,坐著的已經所剩無幾,海盜船長也在其中。當第4瓶酒平分喝下後,大家都倒下了。
等船長醒來,發現海盜船擱淺了。他在航海日誌中寫到:“......昨天,我正好喝了一瓶.......奉勸大家,開船不喝酒,喝酒別開船......”
請你根據這些資訊,推斷開始有多少人,每一輪喝下來還剩多少人。
如果有多個可能的答案,請列出所有答案,每個答案佔一行。
格式是:人數,人數,...
例如,有一種可能是:20,5,4,2,0
答案寫在“解答.txt”中,不要寫在這裡!
3.
漢諾塔(又稱河內塔)問題是源於印度一個古老傳說的益智玩具。
大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片黃金圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上(可以藉助第三根柱子做緩衝)。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動一個圓盤。
如圖【1.jpg】是現代“山寨”版的該玩具。64個圓盤太多了,所以減為7個,金剛石和黃金都以木頭代替了......但道理是相同的。
據說完成大梵天的命令需要太多的移動次數,以至被認為完成之時就是世界末日!
你的任務是精確計算出到底需要移動多少次。
很明顯,如果只有2個圓盤,需要移動3次。
圓盤數為3,則需要移動7次。
那麼64個呢?
答案寫在“解答.txt”中,不要寫在這裡!
4.
某電視臺舉辦了低碳生活大獎賽。題目的計分規則相當奇怪:
每位選手需要回答10個問題(其編號為1到10),越後面越有難度。答對的,當前分數翻倍;答錯了則扣掉與題號相同的分數(選手必須回答問題,不回答按錯誤處理)。
每位選手都有一個起步的分數為10分。
某獲勝選手最終得分剛好是100分,如果不讓你看比賽過程,你能推斷出他(她)哪個題目答對了,哪個題目答錯了嗎?
如果把答對的記為1,答錯的記為0,則10個題目的回答情況可以用僅含有1和0的串來表示。例如:0010110011 就是可能的情況。
你的任務是算出所有可能情況。每個答案佔一行。
答案寫在“解答.txt”中,不要寫在這裡!
5.
以下的靜態方法實現了:把串s中第一個出現的數字的值返回。
如果找不到數字,返回-1
例如:
s = "abc24us43" 則返回2
s = "82445adb5" 則返回8
s = "ab" 則返回-1
public static int getFirstNum(String s)
{
if(s==null || s.length()==0) return -1;
char c = s.charAt(0);
if(c>='0' && c<='9') return _____________; //填空
return ___________________; //填空
}
請分析程式碼邏輯,並推測劃線處的程式碼。
答案寫在 “解答.txt” 檔案中
注意:只寫劃線處應該填的內容,劃線前後的內容不要抄寫。
6.
南北朝時,我國數學家祖沖之首先把圓周率值計算到小數點後六位,比歐洲早了1100年!他採用的是稱為“割圓法”的演算法,實際上已經蘊含著現代微積分的思想。
如圖【1.jpg】所示,圓的內接正六邊形周長與圓的周長近似。多邊形的邊越多,接近的越好!我們從正六邊形開始割圓吧。
如圖【2.jpg】所示,從圓心做弦的垂線,可把6邊形分割為12邊形。該12邊形的邊長a'的計算方法很容易利用勾股定理給出。之後,再分割為正24邊形,....如此迴圈會越來越接近圓周。
之所以從正六邊開始,是因為此時邊長與半徑相等,便於計算。取半徑值為1,開始割圓吧!
以下程式碼描述了割圓過程。
程式先輸出了標準圓周率值,緊接著輸出了不斷分割過程中多邊形邊數和所對應的圓周率逼近值。
public class B21
{
public static void main(String[] args)
{
System.out.println("標準 " + Math.PI);
double a = 1;
int n = 6;
for(int i=0; i<10; i++)
{
double b = Math.sqrt(1-(a/2)*(a/2));
a = Math.sqrt((1-b)*(1-b) + (a/2)*(a/2));
n = ______________; //填空
System.out.println(n + " " + _______________); // 填空
}
}
}
請分析程式碼邏輯,並推測劃線處的程式碼。
答案寫在 “解答.txt” 檔案中
注意:只寫劃線處應該填的內容,劃線前後的內容不要抄寫。
7.
[12,127,85,66,27,34,15,344,156,344,29,47,....]
這是某裝置測量到的工程資料。
因工程要求,需要找出最大的5個值。
一般的想法是對它排序,輸出前5個。但當資料較多時,這樣做很浪費時間。因為對輸出資料以外的資料進行排序並非工程要求,即便是要輸出的5個數字,也並不要求按大小順序,只要找到5個就可以。
以下的程式碼採用了另外的思路。考慮如果手裡已經抓著5個最大數,再來一個資料怎麼辦呢?讓它和手裡的資料比,如果比哪個大,就搶佔它的座位,讓那個被擠出來的再自己找位子,....
import java.util.*;
public class B23
{
public static List<Integer> max5(List<Integer> lst)
{
if(lst.size()<=5) return lst;
int a = _______________________; // 填空
List<Integer> b = max5(lst);
for(int i=0; i<b.size(); i++)
{
int t = b.get(i);
if(a>t)
{
__________________; // 填空
a = t;
}
}
return b;
}
public static void main(String[] args)
{
List<Integer> lst = new Vector<Integer>();
lst.addAll(Arrays.asList(12,127,85,66,27,34,15,344,156,344,29,47));
System.out.println(max5(lst));
}
}
請分析程式碼邏輯,並推測劃線處的程式碼。
答案寫在 “解答.txt” 檔案中
注意:只寫劃線處應該填的內容,劃線前後的內容不要抄寫。
8.
在編寫圖形介面軟體的時候,經常會遇到處理兩個矩形的關係。
如圖【1.jpg】所示,矩形的交集指的是:兩個矩形重疊區的矩形,當然也可能不存在(參看【2.jpg】)。兩個矩形的並集指的是:能包含這兩個矩形的最小矩形,它一定是存在的。
本題目的要求就是:由使用者輸入兩個矩形的座標,程式輸出它們的交集和並集矩形。
矩形座標的輸入格式是輸入兩個對角點座標,注意,不保證是哪個對角,也不保證順序(你可以體會一下,在桌面上拖動滑鼠拉矩形,4個方向都可以的)。
輸入資料格式:
x1,y1,x2,y2
x1,y1,x2,y2
資料共兩行,每行表示一個矩形。每行是兩個點的座標。x座標在左,y座標在右。座標系統是:螢幕左上角為(0,0),x座標水平向右增大;y座標垂直向下增大。
要求程式輸出格式:
x1,y1,長度,高度
x1,y1,長度,高度
也是兩行資料,分別表示交集和並集。如果交集不存在,則輸出“不存在”
前邊兩項是左上角的座標。後邊是矩形的長度和高度。
例如,使用者輸入:
100,220,300,100
150,150,300,300
則程式輸出:
150,150,150,70
100,100,200,200
例如,使用者輸入:
10,10,20,20
30,30,40,40
則程式輸出:
不存在
10,10,30,30
注意:
請仔細除錯!您的程式只有能執行出正確結果的時候才有機會得分!
在評卷時使用的輸入資料與試卷中給出的例項資料可能是不同的。
請把所有類寫在同一個檔案中,除錯好後,存入與【考生資料夾】下對應題號的“解答.txt”中即可。
相關的工程檔案不要拷入。
請不要使用package語句。
源程式中只能出現JDK1.5中允許的語法或呼叫。不能使用1.6或更高版本。
9.
匪警請撥110,即使手機欠費也可撥通!
為了保障社會秩序,保護人民群眾生命財產安全,警察叔叔需要與罪犯鬥智鬥勇,因而需要經常性地進行體力訓練和智力訓練!
某批警察叔叔正在進行智力訓練:
1 2 3 4 5 6 7 8 9 = 110;
請看上邊的算式,為了使等式成立,需要在數字間填入加號或者減號(可以不填,但不能填入其它符號)。之間沒有填入符號的數字組合成一個數,例如:12+34+56+7-8+9 就是一種合格的填法;123+4+5+67-89 是另一個可能的答案。
請你利用計算機的優勢,幫助警察叔叔快速找到所有答案。
每個答案佔一行。形如:
12+34+56+7-8+9
123+4+5+67-89
......
已知的兩個答案可以輸出,但不計分。
各個答案的前後順序不重要。
注意:
請仔細除錯!您的程式只有能執行出正確結果的時候才有機會得分!
請把所有類寫在同一個檔案中,除錯好後,存入與【考生資料夾】下對應題號的“解答.txt”中即可。
相關的工程檔案不要拷入。
請不要使用package語句。
源程式中只能出現JDK1.5中允許的語法或呼叫。不能使用1.6或更高版本。
10.
泊松是法國數學家、物理學家和力學家。他一生致力科學事業,成果頗多。有許多著名的公式定理以他的名字命名,比如概率論中著名的泊松分佈。
有一次閒暇時,他提出過一個有趣的問題,後稱為:“泊松分酒”。在我國古代也提出過類似問題,遺憾的是沒有進行徹底探索,其中流傳較多是:“韓信走馬分油”問題。
有3個容器,容量分別為12升,8升,5升。其中12升中裝滿油,另外兩個空著。要求你只用3個容器操作,最後使得某個容器中正好有6升油。
下面的列表是可能的操作狀態記錄:
12,0,0
4,8,0
4,3,5
9,3,0
9,0,3
1,8,3
1,6,5
每行3個資料,分別表示12,8,6升容器中的油量
第一行表示初始狀態,第二行表示把12升倒入8升容器後的狀態,第三行是8升倒入5升,...
當然,同一個題目可能有多種不同的正確操作步驟。
本題目的要求是,請你編寫程式,由使用者輸入:各個容器的容量,開始的狀態,和要求的目標油量,程式則通過計算輸出一種實現的步驟(不需要找到所有可能的方法)。如果沒有可能實現,則輸出:“不可能”。
例如,使用者輸入:
12,8,5,12,0,0,6
使用者輸入的前三個數是容器容量(由大到小),接下來三個數是三個容器開始時的油量配置,最後一個數是要求得到的油量(放在哪個容器裡得到都可以)
則程式可以輸出(答案不唯一,只驗證操作可行性):
12,0,0
4,8,0
4,3,5
9,3,0
9,0,3
1,8,3
1,6,5
每一行表示一個操作過程中的油量狀態。
注意:
請仔細除錯!您的程式只有能執行出正確結果的時候才有機會得分!
請把所有類寫在同一個檔案中,除錯好後,存入與【考生資料夾】下對應題號的“解答.txt”中即可。
相關的工程檔案不要拷入。
請不要使用package語句。
源程式中只能出現JDK1.5中允許的語法或呼叫。不能使用1.6或更高版本。