十四届蓝桥青少C++组11月评测2022年11月中高级

本文是一份C++编程相关的STEM考试题目集合,包括选择题和编程题,覆盖了运算符、一维数组、循环结构、函数返回值、递归和动态规划等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

STEM考试 C++(3)

一、选择

第一题(难度系数 2)

题目编号:22112701CX01 知识点考察:运算符

执行cout<<5/3;语句后,输出的结果是(   )。

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

A、0        B1           C、2   D、3

第二题(难度系数 2)

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

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

char a[6] = {'a','b','c','d'};

cout << sizeof(a);

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

  

A、4            B、6            C、8         D、12

第三题(难度系数 2)

题目编号:22112701CX03 知识点:一维数组

关于C++中的一维数组,以下描述正确的是(   )。

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

  1. 数组中的元素类型可以不相同
  2. 数组在内存中占有一段连续的存储单元
  3. 数组中的最后一个元素的下标(索引)为-1
  4. 静态数组中元素的个数可以大于数组初始时设定的长度

第四题(难度系数 3)

题目编号:22112701CX04 知识点:while 与 do...while

以下关于while与do...while循环语句描述不正确的是(   )。

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

    

    A、do...while的循环条件可以是1

    B、while的循环体可以是复合语句

    C、do...while的循环体至少执行一次

    D、执行do...while语句,首先判断循环条件,当满足循环条件,开始执行循环体中的语句

第五题(难度系数 4

题目编号:22112701CX05 知识点:函数返回值

以下关于函数的返回值类型和返回值表达式类型的描述不正确的是 (    ) 。

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

    A、函数的返回值类型就是返回值表达式的类型

    B、函数的返回值类型决定返回值表达式的类型

    C、函数返回值的类型是在定义函数时确定的,函数调用时是不能改变的

    D、函数返回值类型与返回值表达式类型不同时,返回值表达式类型会转换为函数返回值类型

二、编程题

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

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

编程实现切割蛋糕

题目描述:

有一块矩形蛋糕,小明从蛋糕的正上方横向和纵向各切N刀(1<N<100),每刀互不重合。计算出蛋糕被切割成了几块。

例如:N = 2,蛋糕被切割成9块。

输入描述:输入一个正整数N(1<N<100),表示蛋糕被横向和纵向各切割的刀数

输出描述:输出一个整数,表示蛋糕最后被切割成了几块

样例输入:2

样例输出:9

评分标准:

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

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

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

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

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

测试用例:

输入

1

5

21

68

98

输出

4

36

484

4761

9801

#include<iostream>
using namespace std;
int main() {
    int n, m;
    cin >> n;
    m = (n + 1) * (n + 1);
    cout << m;
    return 0;
}

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

题目编号:22112701CB02 知识点:判断

编程实现:拼写单词

题目描述:

四种水果的英文单词,分别为Apple、Banana、Orange、Pear。老师通过提示每个单词的首字母,让同学将对应的单词拼写下来。

请编写程序:

当输入的大写字母为“A”时,则输出“Apple”;

当输入的大写字母为“B”时,则输出“Banana”;

当输入的大写字母为“O”时,则输出“Orange”;

当输入的大写字母为“P”时,则输出“Pear”。

输入描述:输入A、B、O、P中任意一个大写字母

输出描述:输出一个字符串,表示大写字母对应的英文单词(单词首字母大写)

样例输入:A

样例输出:Apple

评分标准:

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

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

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

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

测试用例:

输入

B

O

P

A

输出

Banana

Orange

Pear

Apple

#include<iostream>
using namespace std;
int main()
{
   char c;
   cin >> c;
   if(c == 'A'){
       cout << "Apple";
   }
   if(c == 'B'){
       cout << "Banana";
   }
   if(c == 'O'){
       cout << "Orange";
   }
   if(c == 'P'){
       cout << "Pear";
   }
   return 0;
}

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

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

编程实现:业务办理时间

题目描述:

某服务大厅同时开放3个窗口为客户办理业务,窗口编号分别为123

现有N(2≤N≤50)位客户需要办理业务,客户编号1~N,作为办理业务的先后顺序。

起初三个窗口为空闲状态,空闲的窗口会按照客户编号顺序呼叫下一位客户。如果多个窗口同时为空闲状态,按照窗口编号顺序呼叫(1优先于2,2优先于3)。

现给出位客户办理业务的时间(单位:分钟),请计算出N位客户全部办理完业务后,哪一个窗口合计办理业务的时间最短,输出最短时间。

  

例如:N=7,7位客户编号分别为1、2、3、4、5、6、7,客户办理业务时间分别为3、5、2、4、7、1、6,(如下图):

初始客户编号为1、2、3的客户分别在1、2、3窗口同时办理业务;

窗口3用时2分钟办理完3号客户的业务,变为空闲状态,并按顺序呼叫4客户,用时4分钟

窗口1用时3分钟办理完1号客户的业务,变为空闲状态,并按顺序呼叫5客户,用时7分钟

窗口2用时5分钟办理完2号客户的业务,变为空闲状态,并按顺序呼叫6客户,用时1分钟;

6分钟,窗口2和3同时变为空闲状态,窗口2呼叫7号客户用时6分钟。

全部客户办理完业务后,三个窗口用时分别10分钟、12分钟、6分钟,用时最短的是窗口3,最短时间为6分钟。

输入描述:

第一行输入一个正整数N(2≤N≤50),表示办理业务的客户数

第二行输入N个正整数1≤正整数≤50)依次表示位客户办理业务时间,正整数之间以一个空格隔开

输出描述:

输出一个整数,表示客户全部办理完业务,用时最短的窗口所用时间

样例输入:

7

3 5 2 4 7 1 6

样例输出:

6

评分标准:  

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

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

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

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

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

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

测试用例:

输入

6

3 5 2 2 7 1

7

9 5 15 17 11 13 14

10

6 5 9 3 1 18 15 11 14 12

12

13 8 5 2 18 4 14 7 17 20 16 12

输出

5

22

25

42

输入

12

13 17 6 20 1 11 5 8 15 12 2 19

22

12 34 22 12 3 5 7 27 38 2 9 11 23 45 23 12 19 20 24 1 2 43

输出

38

113

#include<bits/stdc++.h>
using namespace std;
int N,ans;
priority_queue< int,vector<int>,greater<int> >q; //优先队列,小根堆 
int main(){
    cin>>N;
    for(int i=0;i<N;i++){
        int x; 
        cin>>x;
        if(q.size()<3){ 
			q.push(x);
		}
        else{
        	int t=q.top();
        	t+=x;
        	q.pop(); 
        	q.push(t);
		}
    }
	cout<<q.top();
    return 0;
}

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

题目编号:22112701CB04 知识点:递归 递推 搜索

编程实现:找路线

题目描述:

现有22名小朋友,依次编号1到22,22名小朋友分别按照下图的位置站好。

每名小朋友只能按照图中箭头指向的方向移动。给出两名小朋友的编号N和M1≤NM22),请你找出从编号N到编号M共有多少条不同的路线。

    

例如:N=3M=7,从编号3的位置到编号7的位置共有5条路线,分别为:(3->5->7),(3->5->6->7),(3->4->5->7),(3->4->5->6->7),(3->4>6->7)。

输入描述:输入个正整数N和M1≤NM22)分别表示两名小朋友的编号,之间以一个空格隔

输出描述:输出一个整数,表示从编号N到编号M共有多少条不同的路线

样例输入:

3 7

样例输出:

5

评分标准:  

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

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

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

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

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

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

测试用例:

输入

1 2

3 6

7 17

12 20

6 18

1 22

输出

1

3

89

34

233

17711

#include<bits/stdc++.h>
using namespace std;
int N,M;
int F[30]; //从1(+x)到i(+x)的方法数 
int main(){
	cin>>N>>M;
	F[1]=1,F[2]=1;
	for(int i=3;i<=M;i++){
		F[i]=F[i-1]+F[i-2];
	}
	cout<<F[M-N+1]; //从N到M,有M-N+1个点 
    return 0;
}

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

题目编号:22112701CB05 知识点:动态规划

编程实现:最大乘积

题目描述:

小明有N(4≤N≤60)个玻璃球,他想将N个玻璃球拆分成若干份(份数≥2),且每份中的数量互不相等。

小明想知道如何拆分可以使每份玻璃球数量的乘积最大。请你编写程序帮助小明计算出最大乘积是多少。

例如:N = 5,

5个玻璃球有2种符合条件的拆分方法:(4,1)、(3,2);

其中,能得到最大乘积的拆分方法为(3,2),最大乘积为6(6=3*2)。

输入描述:输入一个正整数N(4≤N≤60),表示玻璃球的总数量

输出描述:输出一个整数,表示最大乘积

样例输入:5

样例输出:6

评分标准:

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

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

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

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

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

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

测试用例:

输入

8

13

22

39

48

59

输出

15

72

1008

72576

604800

6652800

#include<bits/stdc++.h>
using namespace std;
int N,sum,MaxM;
int a[100],vis[100];
void DFS(int k){ //搜索,回溯
	if(sum>N) return;
	for(int i=1;i<N;i++){
		if(vis[i]==0 && i>a[k-1]){
			a[k]=i;
			sum+=i;
			vis[i]=1;
			if(sum==N){
				int M=1;
				for(int j=1;j<=k;j++) M*=a[j];
				MaxM=max(MaxM,M);
			}else{
				DFS(k+1);
			}
			sum-=i;
			vis[i]=0;
		}
	}
}
int main(){
	cin>>N;
	DFS(1);
	cout<<MaxM<<endl;
    return 0;
}

另一种解法:

#include<bits/stdc++.h>
using namespace std;
int n;
int ans=0;
//深搜he为所有部分的和,ji为所有部分乘积,start为最小可以取的数
void dfs(int he,int ji,int start){
    if (he==n){//如果和等于n,求乘积的最大值
        ans=max(ans,ji);
    }
    //枚举最小可以取的数到最大可以取的数,深搜一遍
    for(int i=start;i+he<=n;i++){
        dfs(he+i,ji*i,i+1);
    }
}
int main() {
    cin>>n;
    dfs(0,1,1);
    cout<<ans;
    return 0;
}

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长春高老师信奥工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值