万卷网> 蓝桥竞赛 >蓝桥C++ > 2024年10月蓝桥杯蓝桥C++(STEMA)中/高级

2024年10月蓝桥杯蓝桥C++(STEMA)中/高级
STEMA 2024 2025-06-09 11:43:00 89

一、单选题

1.

表达式 1 + 2 * 3 的结果是( )。

A.

6

B.

7

C.

8

D.

9

2.

下面的函数要实现的功能是删除单向链表中所有值为 value 的节点,请问横线处应该填写( )。

struct Node
{
	int val;
	Node *nxt;
};
Node* DeleteNode(Node *head, int value)
{
	Node *cur, node;
	node.nxt = head;
	cur = &node;
	while(cur->nxt != NULL)
	{
		_____________________
		else
			cur = cur->nxt;
	}
	return node.nxt;
}
A.

if(cur->val == value) cur->nxt = cur->nxt->nxt;

B.

if(cur->val == value) node.nxt = cur->nxt;

C.

if(cur->nxt->val == value) node.nxt = cur->nxt;

D.

if(cur->nxt->val == value) cur->nxt = cur->nxt->nxt;

3.

定义 int a[5] = {3, 11, 9, 23, 5},请问 a[3] 的值是( )。

A.

11

B.

9

C.

23

D.

5

4.

六进制数 2345 转换为二进制数后,二进制数位上有多少个数字是 1?( )

A.

5

B.

6

C.

7

D.

8

5.

下列选项中,( )是 C++ 的除法运算符。

A.

*

B.

/

C.

+

D.

-

二、编程题

1.

表达式求值

题目描述:

给定一个仅包含数字 1 到 9 的字符串 S,请在 S 中分别插入 1 个加号(+)、2 个加号。

注:

1)加号不能出现在 S 中第一位数字的前面或者最后一位数字的后面;

2)两个加号的位置不能相邻。

插入加号后的字符串可以看做是一个加法表达式,请找出所有可能出现的表达式,并输出所有表达式结果的总和。

例 1:S = "1234";分别在字符串 "1234" 中插入 1 个加号、2 个加号,插入加号的表达式如下:

1)当插入 1 个加号时,表达式有 1 + 234、12 + 34、123 + 4,计算结果依次为 235、46、127;

2)当插入 2 个加号时,表达式有 1 + 2 + 34、1 + 23 + 4、12 + 3 + 4,计算结果依次为 37、28、19;

这些结果的总和为 492(235 + 46 + 127 + 37 + 28 + 19)。

例 2:S = "111",分别在字符串 "111" 中插入 1 个加号、2 个加号,插入加号的表达式如下:

1)当插入 1 个加号时,表达式有 1 + 11,11 + 1,计算结果依次为 12、12;

2)当插入 2 个加号时,表达式有 1 + 1 + 1,计算结果为 3;

这些结果的总和为 27(12 + 12 + 3)。

输入描述:

输入一个仅包含数字 1 到 9 的字符串 S(3≤S的长度≤15)。

输出描述:

输出一个整数,表示所有可能出现的表达式的结果的总和。


样例输入:

1234

样例输出:

492
2.

连续的整数

题目描述:

给定一个整数 n,尝试找出三个连续的整数,使其和恰好为 n。

例如:n = 6;和为 6 的三个连续的整数是 1、2、3(1 + 2 + 3 = 6)。

输入描述:

输入一个整数 n(6≤n≤1000)。

输出描述:

按从小到大的顺序输出和为 n 的三个连续整数,整数之间以一个空格隔开;如果找不到,输出 -1。


样例输入:

6

样例输出:

1 2 3
3.

购买铅笔

题目描述:

某班级里有 n 名同学,每名同学需要 3 支铅笔,请计算 n 名同学共需要多少支铅笔?

输入描述:

输入一个整数 n(1≤n≤100),表示班级里的同学数量。

输出描述:

输出一个整数,表示 n 名同学共需要的铅笔数量。


样例输入:

10

样例输出:

30
4.

不变序列

题目描述:

给定包含 n 个整数的序列,如果序列中出现了连续 k 个及以上的位置元素都相等,则称这些位置的元素组成的序列为不变序列。

请注意,对于同一段连续相等的元素,只统计最长的序列,而不重复计数其子序列。

如:序列 [6,4,4,4,4],只统计 [4,4,4,4],不用再统计其子序列,如 [4,4,4]。

请统计给定的序列中有多少个不变序列,并输出其中最长不变序列的长度。

例如:n = 10,k = 3;序列为 [1,3,2,2,2,6,4,4,4,4],其中不变序列有 2 个,分别是[2,2,2] 和 [4,4,4,4],其中最长不变序列的长度为 4。

输入描述:

第一行输入两个整数 n 和 k(1≤n≤300,2≤k≤n),整数之间以一个空格隔开;

第二行输入 n 个整数 ai(1≤ai≤1000,1≤i≤n),表示给定的序列,整数之间以一个空格隔开。

输入数据保证给定的序列中一定存在不变序列。

输出描述:

一行,输出两个整数,分别表示给定序列中不变序列的数量以及最长不变序列的长度,整数之间以一个空格隔开。


样例输入:

10 3
1 3 2 2 2 6 4 4 4 4

样例输出:

2 4
5.

岩石样本存储

题目描述:

小雷驾驶着飞船登陆了开普勒-22b星球,他采集了 N 块直径相同的圆柱体岩石样本,编号为 1 到 N。飞船上有 M 个从左到右整齐排列的样本储存筒,其直径与岩石样本相同,且储存筒的高度可任意调节(如果某个储存筒的高度发生变化,其余储存筒也变为相同的高度),使每个岩石样本都能够完整存入储存筒中。

现要将 N 块岩石样本按照编号从小到大依次放入储存筒,存放规则如下:

1)1 号岩石样本必须放在左边第一个储存筒中;

2)i 号(2≤i≤N)岩石样本可以选择叠放在 i-1 号岩石样本所在的储存筒中,但是必须使用厚度为 1 的保护垫将两块岩石样本隔开;也可以放在左侧第一个空的储存筒中。

请问按照上述规则存放岩石样本,如何才能使储存筒的高度最小?请计算这个最小高度。

例如:N = 5,M = 3,1 到 5 号岩石样本的高度依次为 5,20,15,13,13,按照下图所示存入岩石样本可使得储存筒的高度最小,为 27。

输入描述:

第一行输入两个整数 N、M(1≤M≤N≤105),分别表示岩石样本的数量和样本储存筒的数量,整数间以一个空格隔开;

第二行输入 N 个整数 Pi(1≤Pi≤109,1≤i≤N),表示第 i 号岩石样本的高度,整数间以一个空格隔开。

输出描述:

输出一个整数,表示样本储存筒的最小高度。


样例输入:

5 3
5 20 15 13 13

样例输出:

27
公众号
客服 反馈
顶部