天天看点

【第九届蓝桥杯大赛决赛真题】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及以上版本的特性。