天天看點

【第九屆藍橋杯大賽決賽真題】JAVA大學C組題解

有空就會更新...

02 結果填空(滿分29分)

标題:海盜與金币

12名海盜在一個小島上發現了大量的金币,後統計一共有将近5萬枚。

登上小島是在夜裡,天氣又不好。由于各種原因,有的海盜偷拿了很多,有的拿了很少。

後來為了“均貧富”,頭目提出一個很奇怪的方案:

每名海盜都把自己拿到的金币放在桌上。然後開始一個遊戲。

金币最多的海盜要拿出自己的金币來補償其他人。

補償的額度為正好使被補償人的金币數目翻番(即變為原來的2倍)。

遊戲要一直進行下去,直到無法完成。

(當金币數最多的不隻一個人或最多金币的人持有金币數不夠補償他人的)

遊戲就這樣緊張地進行了,一直進行了12輪,恰好每人都“放血”一次,

更離奇的是,剛好在第12輪後,每個人的金币數居然都相等了!! 這難道是天意嗎?

請你計算,遊戲開始前,所有海盜的初始金币數目,從小到大排列,中間有一個空格分開。

答案形如:

8 15 29 58 110 ...

當然,這個不是正确答案。

注意:需要送出的是一行空格分開的整數,不要送出任何多餘的内容。

分隔符要用一個西文的空格,不要用其它符号(比如逗号,中文符号等)

05 程式設計(滿分81分)

标題:交換次數

IT産業人才需求節節攀升。業内巨頭百度、阿裡巴巴、騰訊(簡稱BAT)在某海灘進行招聘活動。

招聘部門一字排開。由于是自由搶占席位,三大公司的席位随機交錯在一起,形如:

ABABTATT,這使得應聘者十分别扭。

于是,管理部門要求招聘方進行必要的交換位置,使得每個集團的席位都挨在一起。即最後形如:

BBAAATTT 這樣的形狀,當然,也可能是:

AAABBTTT 等。

現在,假設每次隻能交換2個席位,并且知道現在的席位分布,

你的任務是計算:要使每個集團的招聘席位都挨在一起需要至少進行多少次交換動作。

輸入是一行n個字元(隻含有字母B、A或T),表示現在的席位分布。

輸出是一個整數,表示至少交換次數。

比如,輸入:

TABTABBTTTT

程式應該輸出:

3

再比如,輸入:

TTAAABB

程式應該輸出:

我們約定,輸入字元串的長度n 不大于10萬

資源約定:

峰值記憶體消耗(含虛拟機)

CPU消耗  < 1000ms

注意:請嚴格按要求輸出,不要畫蛇添足地列印類似:“請您輸入...” 的多餘内容。

所有代碼放在同一個源檔案中,調試通過後,拷貝送出該源碼。

不要使用package語句。不要使用jdk1.7及以上版本的特性。

主類的名字必須是:Main,否則按無效代碼處理。

06 程式設計(滿分105分)

标題:自描述序列

小明在研究一個序列,叫Golomb自描述序列,不妨将其記作{G(n)}。這個序列有2個很有趣的性質:

1. 對于任意正整數n,n在整個序列中恰好出現G(n)次。

2. 這個序列是不下降的。

以下是{G(n)}的前幾項:

n12345678910111213

G(n)1223344455566

給定一個整數n,你能幫小明算出G(n)的值嗎?

輸入

----

一個整數n。  

對于30%的資料,1 <= n <= 1000000  

對于70%的資料,1 <= n <= 1000000000  

對于100%的資料,1 <= n <= 2000000000000000  

輸出

----

一個整數G(n)

【樣例輸入】

13

【樣例輸出】

6

資源約定:

峰值記憶體消耗(含虛拟機)

CPU消耗  < 1000ms

注意:請嚴格按要求輸出,不要畫蛇添足地列印類似:“請您輸入...” 的多餘内容。

所有代碼放在同一個源檔案中,調試通過後,拷貝送出該源碼。

不要使用package語句。不要使用jdk1.7及以上版本的特性。