最好用电脑,谷歌浏览器做题; 页面打开不要超过1天,不然就失效了。

蓝桥杯2023年8月Stema C++高级组


1.单选题

1.字符串常量“I love C++”占用的字节数是()。


A.8 

B.9 

C.10 

D.11

2.下列运算符中,优先级最高的是()。


A.= 

B.&& 

C.! 

D.%

3.已定义数组int a[100],以下赋值语句中引用数组元素正确的是()。


A.a[100]=100 

B.a['A']='A' 

C.a[A]=A 

D.a[-1]=-1

4.二进制数1001001001转换成十进制是()。


A.593 

B.585 

C.329 

D.330

5.执行以下代码,输出的结果是()。
int n = 7, m = 1;
for (int i = 1; i <= n; i++)
{
     for(int j = 1; j < i; j++)
    {
         cout << '-';
    }
    for(int j = i; j <= n; j++)
    {
         if (i + j != n + 1)
            cout << 'O';
        else
            cout << '-';
        m++;
    }
    cout << endl;
}


A.
OOOOOO-
OOOOOO-O
OO-OO
-OOO
OOO
OO
O

B.
-OOOOOO
--OOOOO
---OOOO
----OOO
-----OO
------O
-------

C.
OOOOOO-
-OOOO-O
--OO-OO
----OOO
----OOO
-----OO
------O

D.
------O
-----O-
----O--
---O---
-------
-------
-------
OOOOOOO

2.编程题

1.考拉兹猜想
考拉兹猜想,也称为3n+1猜想或冰雹猜想。是指对于任意正整数N,若N为偶数,则将N除以2;若N为奇数,
则将N乘以3再加1。如此循环,最终都能够得到1。
现给定一个正整数N,按照上述步骤,请计算出N要经过多少步才能变成1。
例如:N=5, 变成1的步骤如下:
5 × 3 + 1 = 16
16 ÷ 2 = 8
8 ÷ 2 = 4
4 ÷ 2 = 2
2 ÷ 2 = 1
共经过5步就得到1,故输出5。
输入描述:输入一个正整数N(0输出描述:输出一个整数,表示N要经过多少步才能变成1。
样例输入:5
样例输出:5





2.密码强度
网站提示,密码必须由8~16个字符组成,可以包含数字.大写字母.小写字母.特殊符号这4种字符类型。
注:特殊符号只包含:!.@.#.$.%.^.&.*.(.)._.+.-.=。
以下是三种强度密码的设计规则:
1)包含4种不同类型字符的密码是强密码;
2)包含2种或3种不同类型字符的密码是中等密码;
3)只包含1种类型字符的密码是弱密码。
小威利用浏览器自动创建了N个密码,请你编写程序判断这些密码的强度。
输入描述:
第一行输入一个正整数N(4≤N≤10),表示密码的个数。
接下来的N行,每行输入一个字符串Si(8≤Si的长度≤16),表示一个密码,密码中可能包含数字.大写
字母.小写字母.特殊符号这4种字符类型,且不含空格字符
输出描述:
共N行,每行输出一个整数Ri(Ri只能是0,1,2),依次表示对应密码Si的强度。
如果Si是强密码,则输出2;
如果Si是中等密码,则输出1;
如果Si是弱密码,则输出0。
样例输入:
4
12345678
ASDF1234
ABcde67890
A1b2c3d$e%
样例输出:
0
1
1
2





3.金币数量
聪聪设计了一款闯关小游戏。玩家每通过一关,可以获得若干金币。通过第一关可获得1枚金币,通过第二关可获得3枚金币,通过第三关可获得6枚金币,通过第四关可获得10
枚金币,通过第五关可获得15枚金币……假定玩家总共通过了N关。请总结玩家每一关获得金币的规律,并根据规律计算出他一共可获得多少枚金币。
输入描述:输入一个正整数N(1≤N≤5×10^6),表示通过的关数
输出描述:输出一个整数,表示通过N关之后总共可获得的金币数量
样例输入:5
样例输出:35





4.太阳黑子最大数量一直增加的最长连续年数
太阳黑子是太阳表面因温度相对较低而显得“黑”的局部区域,一般成群出现在太阳表面,并且对地球造成很明显的影响。为此,人类根据多项科学研究追溯到几十万年前的黑子活动,并重建了数据记录。
小蓝拿到了一组数据,有N个整数,表示连续N年里每一年的太阳黑子最大数量,他希望找出所有数量连续增加的记录,并计算出连续增加记录中的最长连续年数。例如:N = 8,连续8年里太阳黑子最大数量依次是2.3.1.2.4.8.4.9,数量连续增加的记录有(2.3).(1.2).(1.2.4).(1.2.4.8).(2.4).(2.4.8).(4.8)和(4.9),连续
增加的年数分别是2,2,3,4,2,3,2,2,其中最长连续年数为4,故最后输出4。
输入描述:
第一行输入一个正整数N(0<N≤1000000),表示数据记录的年数。
第二行输入N个用空格隔开的正整数(0<正整数≤1e9),表示连续N年的太阳黑子最大数量。
输出描述:
输出一个非负整数,表示太阳黑子最大数量连续增加记录中的最长连续年数。
样例输入:
8
2 3 1 2 4 8 4 9
样例输出:
4





5.面积的最大差值
用一个M行N列的矩形网格表示某群岛疆域的地形图,每个小格子里都有一个数字1或者0,其中,0表示海水(蓝色),1表示陆地(绿色),并且矩形网格之外的部分都为海水。每个小格子面积为1,已知每个岛屿都是由1个或多个竖直或水平相邻的陆地小格子组成(斜向不算相邻),且周围都是海水。那么请你计算图中
面积最大的岛屿与面积最小的岛屿之间的面积差值。
例如:M=6,N=8时,群岛疆域示意图如下:
0 0 0 0 1 0 1 1
1 1 1 0 0 0 0 1
0 1 0 0 1 0 0 0
0 0 1 1 1 0 1 1
0 0 0 1 1 0 1 0
0 0 0 1 0 0 1 0
其中,有5个岛屿,面积分别是1,3,4,7,4,最大的岛屿面积是7,最小的岛屿面积是1,面积差是7-1=6。
输入描述:
第一行输入两个正整数M和N(3≤M≤1000,3≤N≤1000),表示网格行数与列数,两数之间用一个空格隔开。
接下来输入M行,每行N个整数,表示地形图(1表示陆地,0表示海水),两个整数之间用一个空格隔开。
输出描述:
输出一个整数,表示面积最大的岛屿与面积最小的岛屿之间的面积差。
样例输入:
6 8
0 0 0 0 1 0 1 1
1 1 1 0 0 0 0 1
0 1 0 0 1 0 0 0
0 0 1 1 1 0 1 1
0 0 0 1 1 0 1 0
0 0 0 1 0 0 1 0
样例输出:
6





6.斗鱼养殖场
聪聪用钢丝网建造了一批同样大小的正方体网箱,将它们拼成了M×N的矩形网格(每个格子都是一个网箱),放在池塘里,专门用来养殖一种凶猛的斗鱼。斗鱼天生好斗,只要旁边有其它斗鱼靠近,哪怕隔着钢丝网,
它们都能斗个你死我活,所以每个网箱里最多只能饲养一条斗鱼;而且,两条斗鱼必须在不相邻的网箱(竖直或水平方向)。
另外,聪聪在某些网箱里还安装了养殖设备,这些网箱里也不能养斗鱼。聪聪想知道,这组网箱一共有多少种可行的饲养方案(至少养一条斗鱼)。由于方案数量比较大,所以只需要求出方案数量对100000007的取模结果。
例如:
M = 2,N = 2,矩形网格的格局如图所示(蓝色为水,灰色为设备):饲养1条鱼的方案有3种(3个蓝色网箱都可以养鱼);饲养2条鱼的方案有1种(用左上角和右下角的蓝色网箱养鱼);
这个2×2的矩形网格有4种饲养方案,4对100000007取模的结果是4,故输出4。
输入描述:
第一行输入两个正整数M和N(2≤M≤100,2≤N≤10),分别表示矩形网格的行数和列数,两个正整数之间以一个空格隔开。
第二行开始输入M行,每行N个整数(只能是1或0),1表示水,0表示设备,整数之间以一个空格隔开。
输出描述:
输出一个整数,表示至少养1条斗鱼的饲养方案数量对100000007取模的结果。
样例输入:
2 2
1 1
0 1
样例输出:
4







`

1.单选题
1 2 3 4 5
2.编程题
1 2 3 4 5
6