2025年7月6日全国青少年信息素养大赛 C++算法创意初中组 复赛真题
剩余时间 --:--:--
单选题 共 5 题
1.

C++ 表达式 (5>3) 3 的值是()

2.

以下C++说法错误的是?

int a, b;
cin >> a >> b;
a = a*b;
b += a;
cout << a <<" "<< b << endl;
3.

想输出 'a'~'z'26个字母,横线处可以填写()。

for(int i =1; i <=26; i++)

    cout << ____ << endl;

4.

以下C++说法错误的是()

int n;
cin >> n;
while(n >0)
{
    cout << n %10;
    n /=10;
}
5.

运行C++程序并输入 9,输出为()

#include<iostream>
using namespace std;
int a[15];
int main()
{
int n;
    cin >> n;
    a[1]= a[2]=1;
for(int i=3; i<=n; i++)
{
        a[i]= a[i-1]+ a[i-2];
}
    cout << a[n];
return0;
}
问答题 共 5 题
1.

探险装备采购:

探险队有 n 人,每人需要 3 个探照灯、1 个氧气瓶、4 捆安全绳。已知探照灯单价为 x 元,氧气瓶单价为 y 元,安全绳单价为 z 元,编写程序计算采购探险装备的总花费。

输入描述:

一行输入四个整数 n、x、y、z,分别表示探险队人数、探照灯单价、氧气瓶单价、安全绳单价,整数之间用空格隔开。

输出描述:

一个整数,代表购买装备的总花费。

样例输入:

40 3 5 4

样例输出:

1200

样例说明:40×(3×3+1×5+4×4)=1200

数据范围:2≤n,x,y,z≤100

2.

地形判断

题目描述:探险队勘探宝藏埋藏之地的地形,测量了东侧、中央、西侧三个关键点的海拔高度。需要编写程序,根据输入的三个点海拔高度判断地形,地形分类如下:

1山丘:中央高于东侧和西侧。

2谷地:中央低于东侧和西侧。

3平原:东侧、中央、西侧高度相同。

4东侧坡:西侧高于中央,中央高于东侧。

5西侧坡:东侧高于中央,中央高于西侧。

6普通地形:不属于以上五种的任意一种。

如果是山丘,输出 "hill"
如果是谷地,输出 "valley"
如果是平原,输出 "plain"
如果是西侧坡,输出 "west"
如果是普通地形,输出 "common"

输入描述:

输入三个整数 abc,用空格隔开,分别表示东侧、中央、西侧的海拔高度。

输出描述:

输出一个字符串,为 “hill”“valley”“plain”“east”“west”“common” 中的一个。

样例输入:

60 60 60

样例输出:

plain

3.

探险队即将进入藏宝地宫,地宫由 个区域组成,编号 1~n。探险队用高科技探明了每个区域的宝藏数 a,a,,aₙ,同时,他们也发现有些区域隐藏着机关,个区域的机关的伤害值用 b,b,,bₙ表示,如果编号为 的区域没有机关,则 bᵢ=0,如果踏入了有机关的区域,不仅无法获得该区域的宝藏,还会受到相应的伤害值。探险队准备了一个防御值为 的护盾抵挡伤害,如果探险队依次经过编号 1~n 区域的过程中受到的伤害总量超过了护盾的防御值 k,则本次探险过于危险,输出 “Danger”,结束探险。如果探险队依次绕过编号 1~n 的全部区域且受到的伤害总量没有超过护盾的防御值 k,则输出获得的宝藏总数。

输入描述
第 行:两个空格隔开的正整数 和 k,表示区域个数和护盾防御值。
第 行:个非负整数 a,a,,aₙ,aᵢ表示编号为 的区域的宝藏数量。
第 行:个非负整数 b,b,,bₙ,bᵢ表示编号为 的区域的机关伤害值。

输出描述
一个整数表示获得的宝藏总数,或者一个字符串 “Danger”。

样例 1
输入
5 6
4 1 9 4 2
0 3 0 1 2
输出

13

样例 2
输入
4 3
3 7 2 1
0 2 2 0 
输出

Danger

4.

古代王都的阅览室里藏着许多奇怪的书籍,这些书籍的标题都是由小写字母组成的字符串。其中一些书籍比较特殊,书名是回文串 —— 无论从左往右读还是从右往左读都一样。这独特的特性与它们的历史背景上的秘密。由于书籍太多,你需要写一个程序来统计回文书名的数量,并将所有回文书名按输入的顺序串联在一起输出。

输入描述
第一行,一个正整数 n,表示共有 本书。
接下来 行,每一行一个字符串,表示书名,每个字符串由小写字母组成,不包含空格。

输出描述
第一行输出一个整数,表示回文书名的个数。
第二行输出一个字符串,所有回文书名按依次连在一起的结果,中间没有空格。如果不存在回文书名,则输出一个空行。

样例 1
输入
5
level
world
kayak
hello
civic
输出
3
levelkayakcivic

提示
[样例说明]
回文串是指正读和反读都相同的字符串,"level""kayak" 和 "civic" 都是回文串。
[数据范围]
≤ ≤ 100
每个字符串长度不超过 50

5.

探险队进入了一个神秘地宫,里面有 堆宝石,每堆宝石个数为正整数。旁边有一面石碑,上面刻着取宝石的规则:探险者需要选定一堆宝石,从这堆宝石开始每隔 k堆宝石拿一堆宝石,选准一堆宝石,选取的那堆会受到神秘力量的惩罚!
已知每一堆宝石的数量,请问探险队最多能拿走多少个宝石?

输入描述
第一行:两个正整数 nk,用一个空格隔开;
第二行:个正整数 a,a,,aₙ,表示每堆宝石的个数。

输出描述
一个整数,表示最多能拿走的宝石个数。

样例 1
输入
7 2
4 6 2 1 10 1 3
输出
16

提示
【样例说明】
从第 堆宝石开始拿,拿走第 14堆宝石,总数为 8
从第 堆宝石开始拿,拿走第 2堆宝石,总数为 16
从第 堆宝石开始拿,拿走第 3堆宝石,总数为 3
从第 堆宝石开始拿,拿走第 4堆宝石,总数为 4
从第 堆宝石开始拿,拿走第 堆宝石,总数为 10
从第 堆宝石开始拿,拿走第 堆宝石,总数为 1
从第 堆宝石开始拿,拿走第 堆宝石,总数为 3
(数据范围)
60% 的数据:10^310^3,且 不超过 100
每堆宝石个数不超过 10^5
60% 数据:枚举 个位置,每 个选一个,求总分最大量。On^2 /k
100% 数据:枚举前 k - 1 个位置,On

C++ 编辑器
输入
输出