试卷 第十四届蓝桥杯国赛C++(中级)真题
第十四届蓝桥杯国赛C++(中级)真题
编程题
第 1 题    问答题

蓝桥杯C++国赛编程实现:主要成分。

背景信息:

金星是离地球最近的行星,人类发射的“金星快车”探测器的主要任务是对金星大气层进行精确的探测,分析其化学成分。

题目描述:

从金星探测器传回来一组测量数据,这是一个长度为N(1≤N≤1000000)的整数数列,数列中的每个整数代表某一种化学成分(相同的整数代表相同的化学成分)。主要成分:指在包含的所有化学成分中比例超过一半(N÷2的结果向下取整)的成分。

现在要判断其是否有主要成分;如果有,其主要成分是哪一种?

例如:

当N=7,整数数列为1 2 3 2 2 1 2,其中成分2有4个,超过了7的一半(7的一半向下取整为3),所以主要成分是2。

当N=6,整数数列为1 102 31 31 1 102,其中的每一种成分都只有2个,未超过6的一半(6的一半为3),所以没有主要成分。


输入描述

第一行输入一个正整数N(1≤N≤1000000),表示数列长度

第二行输入N个整数(1≤整数≤2×109),每个整数表示一种化学成分,两个整数之间用一个空格隔开

输出描述

输出一行,如果存在主要成分,则输出代表主要成分的整数,否则,输出No

样例输入

7

1 2 3 2 2 1 2

样例输出

2

第 2 题    问答题

蓝桥杯C++国赛编程实现摆渡车

【题目描述】

有n名同学要乘坐摆渡车从人大附中前往人民大学,第i位同学在第ti分钟去等车。只有一辆摆渡车在工作,但摆渡车容量可以视为无限大。摆渡车从人大附中出发、把车上的同学送到人民大学、再回到人大附中(去接其他同学),这样往返一趟总共花费m分钟(同学上下车时间忽略不计)。摆渡车要将所有同学都送到人民大学。 

凯凯很好奇,如果他能任意安排摆渡车出发的时间,那么这些同学的等车时间之和最小为多少呢?

注意:摆渡车回到人大附中后可以即刻出发。

 

【输入】

第一行包含两个正整数n,m,以一个空格分开,分别代表等车人数和摆渡车往返一趟的时间。 

第二行包含n个正整数,相邻两数之间以一个空格分隔,第i个非负整数ti代表第i个同学到达车站的时刻。

【输出】

输出一行,一个整数,表示所有同学等车时间之和的最小值(单位:分钟)。

【输入样例】

5 1

3 4 4 3 5

【输出样例】

0

【提示】 

【样例1说明】

同学1和同学4在第3分钟开始等车,等待0分钟,在第3分钟乘坐摆渡车出发。摆渡车在第4分钟回到人大附中。

同学2和同学3在第4分钟开始等车,等待0分钟,在第4分钟乘坐摆渡车出发。摆渡车在第5分钟回到人大附中。 

同学5在第5分钟开始等车,等待0分钟,在第5分钟乘坐摆渡车出发。自此所有同学都被送到人民大学。总等待时间为0。

【样例输入2】

5 5

11 131 5 5

【样例输出2】

【样例2说明】

同学3在第1分钟开始等车,等待0分钟,在第1分钟乘坐摆渡车出发。摆渡车在第6分钟回到人大附中。

同学4和同学5在第5分钟开始等车,等待1分钟,在第6分钟乘坐摆渡车出发。摆渡车在第11分钟回到人大附中。

同学1在第11分钟开始等车,等待2分钟;同学2在第13分钟开始等车,等待0分钟。他/她们在第13分钟乘坐摆渡车出发。自此所有同学都被送到人民大学。

总等待时间为4。可以证明,没有总等待时间小于4的方案。

【提示】 

对于10%的数据,n≤10,m=1,0≤ti≤100。 

对于30%的数据,n≤20,m≤2,0≤ti≤100。

对于50%的数据,n≤500,m≤100,0≤ti≤104。

另有20%的数据,n≤500,m≤10,0≤ti≤4×106。

对于100%的数据,n≤500,m≤100,0≤ti≤4×106。

第 3 题    问答题

蓝桥杯C++国赛编程实现数学实验。

【题目描述】

老师在黑板上写出了一个正整数数列,让所有同学都来做一个数学实验,要求如下:

1.这组数总共不超过500000个,每个数的大小范围在1~80之间;

2.要从这组数中找出两个相邻且相同的数,删掉其中一个数,剩下的一个数加1(例如: 两个相邻的6,变成一个7) ;

3.重复执行第2步;

4.当操作无法继续进行时,实验结束,此时,实验结果就是这组数里面最大的数


注意:不同的实验方案得到的最大数不同


现在给定了一个正整数数列,请你编写程序计算出能够得到的实验结果最大是多少?

例如:

当N=6,这个正整数数列是 1、2、2、2、3、4时,得到最大数的方法如下:

先将后面两个2变成一个3,然后3和3变成4,最后4和4变成5。可以证明,没有其它更好的方案,故输出5。

【输入描述】

第一行输入一个正整数N (1sNs500000)第二行输入N个正整数 (1s正整数s80),相邻两个数之间用一个空格隔开

【输出描述】

输出一个正整数,表示实验结束后能够得到的最大的实验结果

【样例输入】

6

1 2 2 2 3 4

【样例输出】

5

第 4 题    问答题

第十四届蓝桥杯C++国赛编程实现数独填数

数独是源自18世纪瑞士的一种数学游戏。玩家需要根据9×9网格上的已知数字,将剩余的所有空格填上数字,使得9×9网格上每一行、每一列及每一个3×3方块(粗线)内的数字均包含1~9,并且数字不重复。

1:下图(左)是未完成的数独,下图(右)是完成后的结果。

这个数独可以使用如下9×9的字符方阵表示(空格用“.”表示):

例1:

 

2

未完成

68.9.5...

..3...5.8

4.21.87.3

39.72.8..

.......1.

.45..69..

.6.8.4..2

..1..2.75

7...13...

已完成

687935241

913247568

452168793

396721854

278459316

145386927

569874132

831692475

724513689

 

3

未完成

835.2..41

.2.....39

.4.81....

.869.....

2.1..47..

9.....286

...356..7

.9..4.3..

5....7.1.

已完成

835729641

127465839

649813572

386972154

251684793

974531286

418356927

792148365

563297418

现在给定一道数独题,请编程完成填数,并输出最后的结果。

输入描述

共有9行,表示未完成的数独

每一行包含9个字符(字符只能为1~9的数字和“.”),字符之间没有空格及其他字符

其中“.”表示数独上的空格

题目数据保证数独有效且答案唯一

输出描述

输出9行,表示已完成的数独

每行9个数字,数字之间没有空格及其他字符

 

样例输入

17.5..8..

.52.1....

.....759.

.8...94.3

.197.4..8

7......15

4.1...6..

3...2..59

...96..3.

样例输出

174593826

952816347

638247591

286159473

519734268

743682915

491375682

367428159

825961734

第 5 题    问答题

第十四届蓝桥杯C++国赛编程实现简单算术题

【题目描述】

给定一道没有括号的四则混合运算算术题 (可能包合多余的空格),请编程计算出结果云算规则如下:

1.既有乘、除法又有加、减法的,要先算乘除法,再算加减法

2.同级运算时,要从左往右按顺序计算

3.所有除法运算的结果都只保留整数部分(直接舍弃小数部分)

例如: 当算术题为 2 + 3*4 - 10/6 + 1/2*4时,优先计算乘除法,有3*4=12,10/6=1,1/2*4=0; 然后再计算加减法,2+3*4-10/6+1/2*4=2+12-1+0=13,故输出13.

【输入描述】

输入一个字符串,表示算术题,5≤字符串长度≤100000,字符串中只包含数字字符以及”+”,“-”,“*”,“/”运算符,不含括号,可能包含空格:

算式中的运算数范围: 1≤运算数≤200。

【输出描述】

输出一个整数,表示算术题的计算结果。题目数据保证算式的每一步运算的结果都在

-2x~2x之间

【样例输入】

2+3*4-10/6+1/2*4

【样例输出】

13

答题卡
编程题
1 2 3 4 5
题目总数:5
总分数:100
时间:90分钟