第十一届蓝桥杯C++青少年组中/高级组省赛2020年真题解析

作者 : admin 本文共5877个字,预计阅读时间需要15分钟 发布时间: 2024-06-10 共2人阅读

一、单选题

第1题

表达式 ‘6’ – ‘1’ 的值是( )

A:整数 5
B:字符 5
C:表达式不合法
D:字符 6

答案:A
C++ 中,字符字面量用单引号括起来,例如 ‘6’ 和 ‘1’。这些字符字面量实际上是表示字符的 ASCII 值。在 ASCII 编码中,数字字符 ‘6’ 的 ASCII 值是 54,而数字字符 ‘1’ 的 ASCII 值是 49。

当对字符进行算术运算时,C++ 将字符隐式地转换为其对应的 ASCII 值进行计算。因此,表达式 ‘6’ – ‘1’ 实际上是计算 54 减去 49,结果是整数 5。

第2题

若⼆维数组 a 有 n 列,则在 a[i][j] 前的元素个数为( )

A:i*n+j-1
B:i*n+j
C:j*n+i
D:i*n+j+1

答案:B
对于一个二维数组a,假设有n列,则每一行的元素个数为n。
在二维数组a[i][j]前的元素个数可以通过计算得到。由于每行有n个元素,因此在第i行之前的所有行共有i行,每行有n个元素,所以前面的元素个数为i * n。在第i行内部,a[i][j]前面的元素个数可以通过列索引j来确定,即为j个。因此,总的元素个数为i * n + j。
因此,正确答案是B: i * n + j。

第3题

以下叙述正确的是( )

A:break 语句只能⽤于 switch 语句体中;
B:continue 语句的作⽤是使程序的执⾏流程跳出包含它的所有循环;
C:break 语句只能⽤在循环体内和 switch 语句体内;
D:在循环体内使⽤ break 语句和 continue 语句的作⽤相同。

答案:C
A选项错误,break语句不仅可以用于switch语句体中,还可以用于循环体内。
B选项错误,continue语句的作用是跳过当前循环中的剩余代码,返回循环的起始点进行下一次循环,而不是跳出包含它的所有循环。
C选项正确,break语句可以用在循环体内和switch语句体内。在循环中,break语句会终止当前循环的执行,并跳出循环体;在switch语句中,break语句会终止当前的case分支的执行,并跳出switch语句。
D选项错误,break语句和continue语句的作用不同。break语句用于终止当前循环或switch语句的执行,而continue语句用于跳过当前循环中的剩余代码,进行下一次循环的执行。

第4题

按照“先进后出”原则组织数据的结构是( )

A: 队列
B: 栈
C:双向链表
D:⼆叉树

答案:B
栈是一种数据结构,它遵循”后进先出”(Last In, First Out,LIFO)的原则。这意味着最后进入栈的元素将首先被访问或删除。当数据按照先进后出的方式处理时,栈是一个很好的选择。

第5题

⽤ 0、1、2、3、4 这五个数字,能组成多少个没有重复数字的多位偶数?

A:144
B:147
C:160
D:163

答案:C
位偶数:3种(个位是 0、2或4);
两位偶数:如果个位是0,这样的两位数有4种(⼗位4种);如果个位是2或4,这样的两位数有2*3=6种(⼗位3种),共计10种;
三位偶数:如果个位是0,这样的三位数有4*3=12种(百位4种、⼗位3种);如果个位是2或4,这样的三位数有2*3*3=18种( 个位2种、百位3种、⼗位3种),共计30种;
四位偶数:如果个位是0,这样的四位数有4*3*2=24种(千位4种、百位3种、⼗位2种);如果个位是2或4,这样的四位数有2*3*3*2=36种(依次为个位2种、千位3种、百位3种、⼗位2 种),共计60种;
五位偶数:如果个位是0,这样的五位数有4*3*2*1=24种(万位4种、千位3种、百位2种、⼗位1种);如果个位是2或4,这样的五位数有2*3*3*2*1=36种(个位2种、万位3种、千位3 种、百位2种、⼗位1种),共计60种;
共计3+10+30+60+60=163种,其中多位偶数有160种。

二、编程题

第6题:双⾯打印

在 2020 年这个漫长的寒假里,虽然小蓝和他的同学们都在家里,但依旧通过网课的方式坚持学习,而老师们也依旧会布置作业和发放各种电子版的学习资料。为了方便小蓝的学习,妈妈会把老师发放的材料打印出来。而为了环保﹐妈妈一般都进行双面打印,也就是一张纸的正反面都打印出相应的内容。举个例子来说:如果一份电子材料有 3 页,那么需要 2 张纸进行打印;如果一份电子材料有 4 页,那么还是需要 2 张纸进行打印。现在已经知道了一份电子版的学习材料的页数 N,你能帮小蓝计算一下需要几张纸吗?
输入描述
整数 N ( O≤N≤1000 ),代表一份电子版的学习材料的页数。
输出描述
双面打印所需纸的张数。

样例输入

7

样例输出

4

答案:
参考程序:

#include   //调用输入输出流头文件
using namespace std; // 使用标准名字空间
int N, ans; // 定义整数类型变量N,ans,代表单面打印的页数和双面打印的页数
int main() {           // 主函数开始
  cin >> N;            // 输入N的值
  ans = N / 2 + N % 2; // 将ans赋值为N除以2加N模2
  cout << ans;         // 输出ans的值
  return 0;            // 主函数结束,返回0
}

评分标准:
10 分:能正确输出一组数据;
20 分:能正确输出两组数据;
20 分:能正确输出三组数据。

第7题:求完数

因子:因子也叫因数,例如3×5=15,那么3和5是15的因子。同时15×1=15,那么1和15也是15的因子。 1,3,5,15 这四个因子是15的所有因子。
完数:如果一个数等于不含它本身的其他因子之和,则称该数为‘完数’。如6的因子有1,2,3,6,且1+2+3= 6,因此6是完数。
题目描述
输入一个正整数N(0<N<10000),输出小于N的所有完数及小于N的完数个数(个数前加“*”,例如:*2)。
输入描述
输入一个正整数 N(O<N<10000 )
输出描述
输出小于 N 的所有完数及小于 N 的完数个数

样例输入

100

样例输出

6
28
*2

答案:
参考程序一:

#include 
using namespace std;
int main() {
  int i, j, n, sum = 0, count = 0;
  cin >> n;
  for (i = 1; i < n; i++) {
    for (j = 1; j < i; j++) {
      if (i % j == 0)
        sum = sum + j;
    }
    if (sum == i) {
      cout << i << endl;
      count++;
    }
    sum = 0;
  }
  cout << "*" << count;
  return 0;
}

参考程序二:

#include     //调用C语言标准输入输出流头文件
#include   //调用输入输出流头文件
using namespace std; // 使用标准名字空间
bool y(int n) { // 定义函数y,参数n为整数类型,返回值为布尔类型
  int re[1009],
      com_ = 0,
      ans =
          0; // 定义数组re,包含1009个整数类型变量,定义整数类型变量com_.ans并初始化赋值为0
  for (int i = 1; i < n; i++) { // for循环,计数器i从1自增到n-1,共循环n-1次
    if (n % i == 0) {           // 如果n能被i整除
      re[com_] = i;             // 将re的com_号元素赋值为i
      com_++;                   // com_自增1
    }
  }
  for (int i = 0; i < com_;
       i++) { // for循环,计数器i从0自增到com_-1,共循环com_次
    ans += re[i]; // ans自增re的i号元素
  }
  if (ans == n) { // 如果ans等于n
    return true;  // 返回真
  }
  return false; // 返回假
}
int main() { // 主函数开始
  bool y(int n); // 声明函数y,参数n为整数类型,返回值为布尔类型
  int n, ans = 0; // 定义整数类型变量n,ans并初始化赋值为0
  cin >> n;       // 输入n的值
  for (int i = 1; i < n; i++) { // for循环,计数器i从1自增到n-1,共循环n-1次
    if (y(i)) {                 // 如果y(i)为真
      ans++;                    // ans自增1
      cout << i << endl; // 输出i的值
    }
  }
  printf("*%d", ans); // 格式化输出*ans
  return 0;           // 主函数结束,返回0
}

评分标准:
10 分:能正确输出一组数据;
10 分:能正确输出两组数据;
20 分:能正确输出三组数据;
20 分:能正确输出四组数据。

第8题:求阴影面积

题目描述:
用户输入一个正整数a(0 第十一届蓝桥杯C++青少年组中/高级组省赛2020年真题解析插图

提示信息:
三角形面积公式:S=(ah)/2 (公式中a为三角形的底边,h为底边所对应的高)
圆形面积公式:S=πr2 (公式中r为圆的半径,π= 3.14)
已知条件:

1) 半圆的直径和等腰直角三角形直角边长度相同;
2) 三角形与半圆部分重叠;

输入描述
输入一个正整数a(0 输出描述
输出图形阴影面积(保留2位小数)

样例输入

10

样例输出

25.00

答案:
参考程序:

#include    //调用输入输出控制流头文件
#include   //调用输入输出流头文件
using namespace std; // 使用标准名字空间
double a, S;         // 定义浮点数类型变量a,S
int main() {         // 主函数开始
  cin >> a;          // 输入a的值
  S = a * a / 4;     // 将S赋值为a的平方除以4
  cout << setiosflags(ios::fixed) << setprecision(2)
       << S; // 输出S的值,保留两位小数
  return 0;  // 主函数结束,返回0
}

评分标准:
20分:能正确输出一组数据;
20分:能正确输出两组数据;
20分:能正确输出三组数据;
20分:能正确输出四组数据。

第9题:选择题判定

【题⽬描述】
受疫情的影响,2020年蓝桥杯⼤赛⻘少年创意编程C++组的省赛在⽹上进⾏。选择题有5道,都是单选题,每道30分,共计150分。每道选择题选对得30分,选错或者不选得0分。注意以下仅为假设,不代表本场考试选择题的真实答案,仅是针对本编程题假设出的答案。假设正确的答案为“DCBAD”,那么你能根据选⼿的提交情况,判定选⼿的选择题总分吗?选⼿提交⼀个由5个字符组成的字符串,代表选⼿的选项。字符串仅能包含如下5种字符:“D”、“C”、“B”、“A”、“E”。其中“A”、“B”、“C”、“D”代表选⼿选择了某个选项,⽽ “E” 代表选⼿未做该题。
【输⼊描述】
选⼿提交的⼀个由5个字符组成的字符串。
【输出描述】
⼀个整数,代表选⼿选择题的总分。

【样例输⼊】

DCEAB

【样例输出】

90

答案:
参考程序:

#include              //调用输入输出流头文件
using namespace std;            // 使用标准名字空间
string st_ = "DCBAD";           // 定义字符串st_并初始化赋值为DCBAD
string my_;                     // 定义字符串my_
int ans;                        // 定义整数类型变量ans
int main() {                    // 主函数开始
  getline(cin, my_);            // 整行输入字符串my_的值
  for (int i = 0; i < 5; i++) { // for循环,计数器i从0自增到4,共循环5次
    if (st_[i] == my_[i]) { // 如果st_的i号元素等于my_的i号元素
      ans += 30;            // ans自增30
    }
  }
  cout << ans; // 输出ans的值
  return 0;    // 主函数结束,返回0
}

第10题:节⽓

【题⽬描述】
夏⾄将⾄。《中国天⽂年历》显示,北京时间6⽉21⽇,也就是明天,夏⾄伴随着接天莲叶的碧,和映⽇荷花的红,即将盛装登场。夏⾄是中国“⼆⼗四节⽓”的第⼗个节⽓,“⼆⼗四节⽓”被列⼊联合国教科⽂组织⼈类⾮物质⽂化遗产名录。在国际⽓象界,这⼀已有千年历史的时间认知体系被誉为“中国第五⼤发明”。春⾬惊春清⾕天,夏满芒夏暑相连。秋处露秋寒霜降,冬雪雪冬⼩⼤寒。⼆⼗四节⽓,在四季轮回流淌,每个节⽓都有它较为稳定的⽇⼦。下表给出了农历庚⼦年(公历2020年1⽉ 25⽇~2021年2⽉11⽇)中,⼆⼗四个节⽓的名称,公历具体⽇期及汉语拼⾳的缩写。
第十一届蓝桥杯C++青少年组中/高级组省赛2020年真题解析插图(1)

【输⼊描述】
整数M,N(2≤M≤12,1≤N≤31),M,N分别代表公历2020年的某⽉,某⽇。所给出的数据均为合法⽇期。
【输出描述】
如果当天恰好是⼀个节⽓,输出这个节⽓的汉语拼⾳缩写,如当天不是节⽓则输出下⼀个节⽓的汉语拼⾳缩写。

【样例输⼊】

7 4

【样例输出】

XS

【提示说明】
样例输出1说明:7⽉4⽇之后的7⽉6⽇,是⼩暑,汉语拼⾳缩写是“XS”。

答案:
参考程序:

// 使用暴力枚举法
#include
using namespace std;
int main()
{
int a,b;
cin>>a>>b;
if((a==2&&b<=4)||(a==1&& b>20))cout<<"LC";
else if(a==2&&b<=19) cout<<"YS";
else if((a==3&&b<=5)||(a==2&& b>19)) cout<<"JZ";
else if(a==3&&b<=20) cout<<"CF";
else if((a==4&&b<=4)||(a==3&& b>20)) cout<<"QM";
else if(a==4&&b<=19) cout<<"GY";
else if((a==5&&b<=5)||(a==4&& b>19)) cout<<"LX";
else if(a==5&&b<=20) cout<<"XM";
else if((a==6&&b<=5)||(a==5&& b>20)) cout<<"MZ";
else if(a==6&&b<=21) cout<<"XZ";
else if((a==7&&b<=6)||(a==6&& b>21)) cout<<"XS";
else if(a==7&&b<=22) cout<<"DS";
else if((a==8&&b<=7)||(a==7&& b>22)) cout<<"LQ";
else if(a==8&&b<=22) cout<<"CS";
else if((a==9&&b<=7)||(a==8&& b>22)) cout<<"BL";
else if(a==9&&b<=22) cout<<"QF";
else if((a==10&&b<=8)||(a==9&& b>22)) cout<<"HL";
else if(a==10&&b<=23) cout<<"SJ";
else if((a==11&&b<=7)||(a==10&& b>23)) cout<<"LD";
else if(a==11&&b<=22) cout<<"XX";
else if((a==12&&b<=7)||(a==11&& b>22)) cout<<"DX";
else if(a==12&&b<=21) cout<<"DZ";
else if((a==1&&b<=5)||(a==12&& b>21)) cout<<"XH";
else cout<<"DH";
return 0;
}
本站无任何商业行为
个人在线分享 » 第十一届蓝桥杯C++青少年组中/高级组省赛2020年真题解析
E-->