【第九届蓝桥杯大赛决赛真题】JAVA大学C组题解

本文探讨了两道算法题目,一是海盗们如何通过一轮轮的金币分配达到财富均等,二是求解Golomb自描述序列中特定位置的数值。涉及算法设计与数学推理。

 

有空就会更新....

 

有的题目重复了:再另一篇帖子:https://www.cnblogs.com/dgwblog/p/9090923.html

 

02 结果填空(满分29分)

 

标题:海盗与金币

 

12名海盗在一个小岛上发现了大量的金币,后统计一共有将近5万枚。

登上小岛是在夜里,天气又不好。由于各种原因,有的海盗偷拿了很多,有的拿了很少。

后来为了“均贫富”,头目提出一个很奇怪的方案:

每名海盗都把自己拿到的金币放在桌上。然后开始一个游戏。

金币最多的海盗要拿出自己的金币来补偿其他人。

补偿的额度为正好使被补偿人的金币数目翻番(即变为原来的2)

游戏要一直进行下去,直到无法完成。

(当金币数最多的不只一个人或最多金币的人持有金币数不够补偿他人的)

 

游戏就这样紧张地进行了,一直进行了12轮,恰好每人都“放血”一次,

更离奇的是,刚好在第12轮后,每个人的金币数居然都相等了!! 这难道是天意吗?

 

请你计算,游戏开始前,所有海盗的初始金币数目,从小到大排列,中间有一个空格分开。

 

答案形如:

8 15 29 58 110 ...

当然,这个不是正确答案。

 

注意:需要提交的是一行空格分开的整数,不要提交任何多余的内容。

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

 

 

05 程序设计(满分81分)

 

标题:交换次数

 

IT产业人才需求节节攀升。业内巨头百度、阿里巴巴、腾讯(简称BAT)在某海滩进行招聘活动。

招聘部门一字排开。由于是自由抢占席位,三大公司的席位随机交错在一起,形如:

ABABTATT,这使得应聘者十分别扭。

于是,管理部门要求招聘方进行必要的交换位置,使得每个集团的席位都挨在一起。即最后形如:

BBAAATTT 这样的形状,当然,也可能是:

AAABBTTT 等。

 

现在,假设每次只能交换2个席位,并且知道现在的席位分布,

你的任务是计算:要使每个集团的招聘席位都挨在一起需要至少进行多少次交换动作。

 

输入是一行n个字符(只含有字母BAT),表示现在的席位分布。

输出是一个整数,表示至少交换次数。

 

比如,输入:

TABTABBTTTT

 

程序应该输出:

3

 

再比如,输入:

TTAAABB

 

程序应该输出:

0

 

我们约定,输入字符串的长度n 不大于10

 

资源约定:

峰值内存消耗(含虚拟机) < 256M

CPU消耗  < 1000ms

 

注意:请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

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

主类的名字必须是:Main,否则按无效代码处理。

 

06 程序设计(满分105分)

 

标题:自描述序列

 

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

 

1. 对于任意正整数nn在整个序列中恰好出现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

 

资源约定:

峰值内存消耗(含虚拟机) < 256M

CPU消耗  < 1000ms

 

注意:请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

 

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

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

主类的名字必须是:Main,否则按无效代码处理。

转载于:https://www.cnblogs.com/dgwblog/p/10111903.html

目前尚未有2024年第十四届蓝桥杯大赛软件赛国赛C/C++大学B真题题解发布,因为该赛事的时间线可能还未到达公布阶段[^1]。然而,可以基于以往的比赛形式和内容推测其考察的知识点范围以及提供一些常见的练习方向。 以下是关于如何准备此类比赛的一些指导: ### 准备指南 #### 一、熟悉基础算法 掌握基本的数据结构和经典算法对于参赛者至关重要。这包括但不限于数、链表、栈、队列等数据结构的应用;排序(快速排序、归并排序)、查找(二分法)、动态规划等问题解决方法的学习实践。 ```cpp // 快速排序实现 (C++) void quickSort(int arr[], int low, int high){ if(low < high){ int pi = partition(arr,low,high); quickSort(arr, low, pi-1); quickSort(arr, pi+1, high); } } int partition (int arr[], int low, int high){ int pivot = arr[high]; int i = (low - 1); for (int j = low; j <= high- 1; j++){ if (arr[j] < pivot){ i++; swap(&arr[i], &arr[j]); } } swap(&arr[i + 1], &arr[high]); return (i + 1); } ``` ```java // 快速排序实现 (Java) public static void quickSort(int[] array, int start, int end) { if(start >= end) return; int pivotIndex = partition(array, start, end); quickSort(array, start, pivotIndex - 1); quickSort(array, pivotIndex + 1, end); } private static int partition(int[] array, int start, int end) { int pivotValue = array[end]; int index = start; for(int i=start;i<end;i++) { if(array[i]<pivotValue) { swap(array,i,index++); } } swap(array,end,index); return index; } ``` #### 二、深入理解编程语言特性 无论是使用C++还是Java参加竞赛,都需要深入了解所选语言的特点及其标准库的功能。例如,在C++中熟练运用STL容器类如vector、map等能够极大提高编码效率;而在Java里,则需熟知Collections框架下的各类集合类型及其实现原理。 #### 三、模拟实战训练 通过历年试题进行反复演练是非常有效的备考方式之一。虽然现在无法获取到最新的2024年具体题目,但是可以通过分析往年的考题来预测可能出现的新颖考点,并针对性加强薄弱环节。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值