当前位置:   article > 正文

十四届蓝桥青少C++组1月评测2023年1月中高级_stem86考试c++真题

stem86考试c++真题

STEM考试 C++5

一、选择

第一题(难度系数 2)

题目编号:23011501CX01 知识点考察:C++基础知识

C++程序的基本模块是(   )。

*选择题严禁使用程序验证,选择题不答和答错不扣分

A、标识符            B、表达式            C、语句          D、函数

第二题(难度系数 2)

题目编号:23011501CX02 知识点:一维数组

以下一维数组定义中,哪一个语法不正确?(   )

*选择题严禁使用程序验证,选择题不答和答错不扣分

  

A、int a[]={1,2,3};       B、int a[10]={1};  C、int a[];      D、int a[5];

第三题(难度系数 3)

题目编号:23011501CX03 知识点:函数调用

执行以下代码,输出的结果是(   )。

#include<iostream>

using namespace std;

int func(int x)

{

    if (x <= 3)

        return x * 2 - 1;

    else if (x >= 6)

        return func(x - 3) - 2;

    else

        return func(x + 1) + x;

}

int main()

{

    cout << func(14);

    return 0;

}

*选择题严禁使用程序验证,选择题不答和答错不扣分

A、2          B、 4             C、 6              D、 -1

第四题(难度系数 3)

题目编号:23011501CX04 知识点:指针

已知:int i[5],*p=i;那么执行cout<<p+2;语句后,可以输出(   )。

*选择题严禁使用程序验证,选择题不答和答错不扣分

A、i[2]的值    B、i[2]的地址      C、 i[3]的值        D、 i[5]的地址

第五题(难度系数 5)

题目编号:23011501CX05 知识点:字符数组

执行下面的程序,当输入的内容为“Hello world”时,输出的结果是 (    )。

    char s[15];

    cin >> s;

    cout<<strlen(s);

*选择题严禁使用程序验证,选择题不答和答错不扣分

A、5               B、10              C、 11            D、 15

编程题

第一题(难度系数2,15 个计分点)

题目编号:23011501CB01 知识点:运算符

编程实现求十位数字

题目描述:

给定一个正整数N(1<N<10^11),输出正整数十位上的数字。

输入描述:输入一个正整数N(1<N<10^11)

输出描述:输出正整数十位上的数字

样例输入:123

样例输出2

评分标准:

3分:能正确输出第一组数据;

3分:能正确输出第二组数据;

3分:能正确输出第三组数据;

3分:能正确输出第四组数据;

3分:能正确输出第五组数据。

测试用例:

输入

200

101

111111

123456789

2020202020

输出

0

0

1

8

2

  1. #include<iostream>
  2. using namespace std;
  3. int main() {
  4. long long i;//数据范围超过int,要用long long
  5. cin >> i;
  6. cout << (i / 10 % 10);
  7. return 0;
  8. }

第二题(难度系数 3,18 个计分点)

题目编号:23011501CB02 知识点:循环 判断

题目描述:寻宝石

编程实现:

有N(1<N<100)个盒子排成一排,每个盒子都放有宝石。请找出3个连续的盒子,使得3个盒子中的宝石数量之和最多。

例如:N = 5,盒子中的宝石数量依次为6、2、4、5、1。

3个连续的盒子共有3组,分别为(6,2,4)、(2,4,5)、(4,5,1),宝石数量之和最多是(6,2,4),宝石数量为12。

输入描述:
第一行输入一个正整数N(1<N<100),表示这排盒子的数量

第二行输入N个正整数(1≤正整数<100),表示盒子中依次放有的宝石数量,正整数之间以一个空格隔开

输出描述:

输出一个整数,表示3个连续的盒子最多的宝石数量

样例输入:

5

6 2 4 5 1

样例输出:

12

评分标准:

3分:能正确输出第一组数据;

3分:能正确输出第二组数据;

3分:能正确输出第三组数据;

3分:能正确输出第四组数据;

3分:能正确输出第五组数据;

3分:能正确输出第六组数据。

测试用例:

输入

5

35 17 11 20 10

7

2 3 1 4 2 5 8

10

2 13 15 6 11 12 1 16 17 14

17

1 20 2 18 4 13 16 12 8 15 11 3 8 12 34 50 2

输出

63

15

47

96

输入

11

9 83 40 37 59 90 18 9 10 58 21

25

17 51 66 92 89 57 89 13 87 42 92 9 75 23 97 29 75 93 63 20 72 77 40 51 84

输出

186

247

  1. #include<iostream>
  2. using namespace std;
  3. int a[101];
  4. int main() {
  5. int n;
  6. cin >> n;
  7. for (int i = 0; i < n; i++) {
  8. cin >> a[i];
  9. }
  10. int s = a[0] + a[1] + a[2];
  11. for (int i = 1; i < n - 2; i++) {
  12. s = max(s, a[i] + a[i + 1] + a[i + 2]);
  13. }
  14. cout << s;
  15. return 0;
  16. }

第三题(难度系数 3,25 个计分点)

题目编号:23011501CB03 知识点:循环 判断

编程实现:移动石子

题目描述:

将N(1<N<50)堆石子围成一个圆圈,已知每堆石子的数量,且石子的总数量能被N整除。请按照如下要求移动石子,使得N堆石子的数量变为相同。

要求:可以从每堆石子中拿取石子移动到它左右相邻的两堆石子堆中。

计算出要使得N堆石子的数量变为相同,至少需要移动多少颗石子。

例如:N = 33堆石子顺时针方向的数量依次为267。最少需要移动3颗石子,N堆石子的数量变为相同,每堆5颗

1次从第堆石子中拿1颗移动第一堆的石子中,此时3堆石子的数量依次为3、57

2次从第堆石子中拿2颗移动堆的石子中,此时3堆石子的数量依次为555

输入描述:

第一行输入一个正整数N(1<N<50),表示石子的堆数

第二行输入N个正整数(1<正整数<100),表示顺时针方向每堆石子的原始数量,正整数之间以一个空格隔开

输出描述:

输出一个整数,表示要使N堆石子的数量变为相同,最少移动的石子数量,如果原始N堆石子数量相同,则输出0

样例输入:

3

2 6 7

样例输出:

3

评分标准:

3分:能正确输出第一组数据;

3分:能正确输出第二组数据;

3分:能正确输出第三组数据;

3分:能正确输出第四组数据;

4分:能正确输出五组数据;

4分:能正确输出六组数据。

测试用例:

输入

4

1 2 5 4

7

2 3 1 4 2 3 6

10

2 13 15 9 11 12 1 16 17 14

17

7 20 2 18 4 13 16 12 10 15 11 4 8 12 34 50 2

输出

4

7

29

184

输入

11

15 83 40 37 59 90 18 9 10 58 21

25

17 51 66 92 89 57 86 13 87 42 92 9 75 23 97 29 75 93 63 20 72 77 40 51 84

输出

221

486

  1. #include<iostream>
  2. #include<cmath>
  3. using namespace std;
  4. int a[120], b[51];
  5. int main() {
  6. int n, sum1 = 0, avg = 0;
  7. cin >> n;
  8. for (int i = 0; i < n; i++) {
  9. cin >> a[i];
  10. sum1 += a[i];
  11. a[i + n] = a[i];
  12. }
  13. avg = sum1 / n;
  14. int maxc = 50000;
  15. for (int i = 0; i < n; i++) {
  16. for (int j = 0; j < n; j++) {
  17. b[j] = a[i + j];
  18. }
  19. int cnt = 0;
  20. for (int j = 0; j < n - 1 ; j++) {
  21. cnt += abs(b[j] - avg);
  22. b[j + 1] += b[j] - avg;
  23. b[j] = avg;
  24. }
  25. maxc = min(maxc, cnt);
  26. }
  27. cout << maxc;
  28. return 0;
  29. }

第四题(难度系数4,30个计分点)

题目编号:23011501CB04 知识点:二维

编程实现:花坛

题目描述:

小明有一张N*M2≤N≤302M30的方格纸,且每个小方格都是正方形,纸上的每个小方格中都画了一个花朵,共有a、b、c种不同的花朵。为了美观现按照以下要求为花朵涂色。

要求:

1)涂色的花朵区域必须是一个正方形矩阵,最小为一个2*2的正方形矩阵;

2)正方形矩阵中的花朵必须是同一种花朵;

3)只要正方形矩阵四个顶点不重合就算作不同的正方形矩阵(有部分区域重叠或者大正方形矩阵包含小正方形矩阵,按不同的正方形矩阵计算)。

已知方格纸的行数N2≤N≤30和列数M2M30,及每个小正方形方格中花朵的种类,请帮助小明计算出,按要求有多少个正方形矩阵需要涂色。

例如:N=4,D = 5,矩阵如下图:

其中有3个正方形矩阵需要涂抹颜料(蓝色框区域和绿色区域的矩阵部分重叠按2个计算)。

输入描述:

第一行输入两个正整数N(2≤N≤30)和M(2≤M≤30),N表示矩阵方格的行数,M表示矩阵方格的列数,两个正整数之间以一个空格隔开

第二行开始输入N行,每行M个字符(字符只包含a、b、c),字符之间以一个空格隔开

输出描述:

输出一个整数,表示N*M的矩阵方格纸中,需要涂抹颜料正方形矩阵的个数

样例输入:

4 5

b b c b a

b b a c b

c b a a a

a b a a a

样例输出:

3

评分标准:  

4分:能正确输出第一组数据;

4分:能正确输出第二组数据;

4分:能正确输出第三组数据;

4分:能正确输出第四组数据;

4分:能正确输出第五组数据;

5分:能正确输出第六组数据。

测试用例:

输入

3 4

c a b b

c b c c

c a c c

4 2

c c

c c

c a

b b

5 5

a b a a b

c a a a c

c b c c c

c a b c c

b b a b b

5 8

b c b b a b a b

c a c c c a b c

b a c c c c a b

b c c c c a c c

a c b c a c b c

9 11

b c b c a a a b b a b

c a c a b c a b a b a

a b b a b b b b c a b

b c c a b b b b a c c

a c b c b b b a a b a

c a c a b a b c b c a

c c b a c c a b c b c

c a c b a b a a c b c

a c b c a c b a b c b

15 21

b c b b b b a b b b b c b a a b b c b a b

c a b a b c b b b b b a b a b b a c a b a

a b b a b b a c b a b b a b b b a b c b b

b b b b b b c c b c b c a b b b a b b b b 

b c b c a b b b b c b c b b b a a b b a a

c a c a b a a c b a b b c a b b b a b a c

b c b c a c a c c b b b c a b a c b a b c

c a b a b c b b b b b a b a b b a c a b a 

c a c c a c c b a c a b b a b a a c b b c

c a c b a b b c b c a b a b b b a b a a b

b c b c a b b b b c b c b b b a a b b a a

b b a b a b b a c a b a b c b c a b b b b

b c b b b b a b b b b c b a a b b c b a b

a a a c b a b b c a c a b b a b a a c a c

b c b c a c a c c b b b c a b a c b a b c

输出

1

1

2

5

6

14

  1. #include<iostream>
  2. using namespace std;
  3. const int N = 30;
  4. char a[N + 1][N + 1];
  5. int main() {
  6. int n, m, cnt = 0;
  7. cin >> n >> m;
  8. for (int i = 0; i < n; i++) {
  9. for (int j = 0; j < m; j++) {
  10. cin >> a[i][j];
  11. }
  12. }
  13. for (int e = 2; e <= min(m, n); e++) {
  14. for (int i = 0; i <= n - e; i++) {
  15. for (int j = 0; j <= m - e; j++) {
  16. bool f = true;
  17. for (int x = 0; x < e; x++) {
  18. for (int y = 0; y < e; y++) {
  19. if (a[i][j] != a[i + x][j + y]) {
  20. f = false;
  21. break;
  22. }
  23. }
  24. if (!f) {
  25. break;
  26. }
  27. }
  28. if (f) {
  29. cnt++;
  30. }
  31. }
  32. }
  33. }
  34. cout << cnt;
  35. return 0;
  36. }

第五题(难度系数 5,35 个计分点

题目编号:23011501CB05 知识点:递增递减数列

编程实现:公园树木

题目描述:

某公园有N(3≤N≤50)棵树排成一排,已知每棵树的高度。现要去掉一些树,使得剩下树的高度从左至右呈现先递增再递减的规律(即剩余的树中仅有一棵最高的树,且它左侧的所有树中后一棵树都要比前一棵树高,它右侧的所有树中后一棵树都要比前一棵树矮)
给出N棵树的高度(高度单位:m,1.0≤每棵树高度≤100.0,保留一位小数),请你计算出最少去掉几棵树才能使这排树呈现先递增再递减的规律,如果不能呈现则输出-1(只有递增或者只有递减都为不能呈现)。
 
例如:N=10,10棵树的高度从左到右依次为1.0、2.3、1.2、1.7、1.1、2.0、1.8、1.8、1.2、1.9。


要使这排树呈现先递增再递减的规律,最少去掉4棵树,去掉的编号分别为2、5、8、10。


剩余树的高度依次为1.0、1.2、1.7、2.0、1.8、1.2,最高树为2.0,其左侧树的高度依次为1.0、1.2、1.7、2.0,呈现递增趋势(从左至右且包含最高树);其右侧树的高度依次为2.0、1.8、1.2,呈现递减趋势(从左至右且包含最高树)。
 
输入描述:
第一行输入一个正整数N(3≤N≤50),表示这排树的数量
第二行输入N个数(1.0≤每个数≤100.0,保留一位小数),表示每棵树的高度,每个数之间以一个空格隔开
输出描述:
输出一个整数,表示最少去掉几棵树才能使这排树呈现先递增再递减的规律,如果不能呈现则输出-1


样例输入:
10
1.0 2.3 1.2 1.7 1.1 2.0 1.8 1.8 1.2 1.9
样例输出:
4
 

评分标准: 

5分:能正确输出第一组数据;

5分:能正确输出第二组数据;

5分:能正确输出第三组数据;

5分:能正确输出第四组数据;

5分:能正确输出第五组数据;

5分:能正确输出第六组数据。

测试用例:

输入

4
1.2 1.7 1.1 2.0

4
75.6 33.6 14.1 4.9

输出

1

-1

输入

8

75.6 2.8 33.6 65.7 14.1 50.1 4.9 24.8

输出

3

输入

13

37.7 77.7 2.7 15.6 39.9 3.8 71.0 21.8 26.7 19.7 74.2 20.2 37.5

输出

7

输入

8

18.6 18.6 15.0 20.0 16.0 13.0 19.7 22.0

输出

4

输入

18

2.8 4.3 5.5 7.6 2.2 4.4 6.9 2.3 2.5 7.6 2.5 6.5 3.4 1.2 2.3 5.4 2.2 3.0

输出

9

  1. #include<iostream>
  2. using namespace std;
  3. int f1[51], f2[51];
  4. double t[51];
  5. int main() {
  6. int n;
  7. cin >> n;
  8. for (int i = 0; i < n; i++) {
  9. cin >> t[i];
  10. f1[i] = 1;
  11. f2[i] = 1;
  12. }
  13. int cnt = 0, maxlen_i = 0, maxlen_d = 0;
  14. for (int i = 0; i < n; i++) {
  15. int maxl_i = 1;
  16. for (int j = 0; j < i; j++) {
  17. if (t[j] < t[i])
  18. maxl_i = max(maxl_i, f1[j] + 1);
  19. }
  20. f1[i] = maxl_i;
  21. maxlen_i = max(maxlen_i, maxl_i);
  22. }
  23. for (int i = n - 1; i >= 0; i--) {
  24. int maxl_d = 1;
  25. for (int j = n - 1; j > i; j--) {
  26. if (t[j] < t[i])
  27. maxl_d = max(maxl_d, f2[j] + 1);
  28. }
  29. f2[i] = maxl_d;
  30. maxlen_d = max(maxlen_d, maxl_d);
  31. }
  32. int maxcnt = f1[0] + f2[0];
  33. for (int i = 1; i < n; i++) {
  34. maxcnt = max(maxcnt, f1[i] + f2[i]);
  35. }
  36. if (maxlen_d == n or maxlen_i == n)
  37. cout << -1;
  38. else
  39. cout << (n - maxcnt + 1);
  40. return 0;
  41. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/485367
推荐阅读
相关标签
  

闽ICP备14008679号