2023年1月第14届蓝桥杯C++编程青少组(选拔赛-中高级)真题(含答案)_第1页
2023年1月第14届蓝桥杯C++编程青少组(选拔赛-中高级)真题(含答案)_第2页
2023年1月第14届蓝桥杯C++编程青少组(选拔赛-中高级)真题(含答案)_第3页
2023年1月第14届蓝桥杯C++编程青少组(选拔赛-中高级)真题(含答案)_第4页
2023年1月第14届蓝桥杯C++编程青少组(选拔赛-中高级)真题(含答案)_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2023年1月第14届蓝桥杯C++编程青少组(选拔赛_中高级)真题(含答案)一、单选题。1.题C++程序的基本模块是()。A.标识符B.表达式C.语句D.函数标准答案:D。2.以下一维数组定义中,哪一个语法不正确?()。A.inta[]={1,2,3};B.inta[10]={1};C.inta[];D.inta[5];标准答案:C。3.执行以下代码,输出的结果是()。#include<iostream>usingnamespacestd;intfunc(intx){if(x<=3)returnx*2-1;elseif(x>=6)returnfunc(x-3)-2;elsereturnfunc(x+1)+x;}intmain(){cout<<func(14);return0;}A.2B.4C.6D.-1标准答案:A。4.已知:inti[5],*p=i;那么执行cout<<p+2;语句后,可以输出()。A.i[2]的值B.i[2]的地址C.i[3]的值D.i[5]的地址标准答案:B。5.执行下面的程序,当输入的内容为“Helloworld”时,输出的结果是()。chars[15];cin>>s;cout<<strlen(s);A.5B.10C.11D.15标准答案:A。二、编程题。6.求十位数字。题目描述:给定一个正整数N(1<N<1011),输出正整数十位上的数字。输入描述:输入一个正整数N(1<N<1011)。输出描述:输出正整数十位上的数字。样例输入:123样例输出:2参考程序:#include<iostream>usingnamespacestd;intmain(){longlongi;cin>>i;cout<<(i/10%10);return0;}7.寻宝石。编程实现:有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个连续的盒子最多的宝石数量。样例输入:562451样例输出:12参考程序://参考代码1。#include<iostream>usingnamespacestd;inta[101];intmain(){intn;cin>>n;for(inti=0;i<n;i++){cin>>a[i];}ints=a[0]+a[1]+a[2];for(inti=1;i<n-2;i++){s=max(s,a[i]+a[i+1]+a[i+2]);}cout<<s;return0;}8.移动石子。题目描述:将N(1<N<50)堆石子围成一个圆圈,已知每堆石子的数量,且石子的总数量能被N整除。请按照如下要求移动石子,使得N堆石子的数量变为相同。要求:可以从每堆石子中拿取石子移动到它左右相邻的两堆石子堆中。计算出要使得N堆石子的数量变为相同,至少需要移动多少颗石子。例如:N=3,3堆石子顺时针方向的数量依次为2、6、7。最少需要移动3颗石子,N堆石子的数量变为相同,每堆5颗。第1次从第一堆石子中拿1颗移动到第一堆的石子中,此时3堆石子的数量依次为3、5、7。第2次从第三堆石子中拿2颗移动到第一堆的石子中,此时3堆石子的数量依次为5、5、5。输入描述:第一行输入一个正整数N(1<N<50),表示石子的堆数。第二行输入N个正整数(1<正整数<100),表示顺时针方向每堆石子的原始数量,正整数之间以一个空格隔开。输出描述:输出一个整数,表示要使N堆石子的数量变为相同,最少移动的石子数量,如果原始N堆石子数量相同,则输出0。样例输入:3267样例输出:3参考程序:#include<bits/stdc++.h>usingnamespacestd;intn,x,s,ans=INT_MAX;vector<int>a,v;voidprint(){for(inti=0;i<n;i++)cout<<a[i]<<'';cout<<'\n';}signedmain(){cin>>n;for(inti=1;i<=n;i++)cin>>x,v.push_back(x),s+=x;s/=n;for(inti=0;i<n;i++){a.clear();for(intj=0;j<n;j++)a.push_back(v[(i+j)%n]);//print();inttot=0;for(inti=0;i<n-1;i++){if(a[i]==s)continue;if(a[i]<s){tot+=(s-a[i]);a[i+1]-=(s-a[i]),a[i]=s;}else{tot+=(a[i]-s);a[i+1]+=(a[i]-s),a[i]=s;}}//cout<<tot<<endl;//print();ans=min(ans,tot);}cout<<ans;}9.花坛。题目描述:小明有一张N*M(2≤N≤30,2≤M≤30)的方格纸,且每个小方格都是正方形,纸上的每个小方格中都画了一个花朵,共有a、b、c三种不同的花朵。为了美观现按照以下要求为花朵涂色。要求:1)涂色的花朵区域必须是一个正方形矩阵,最小为一个2*2的正方形矩阵。2)正方形矩阵中的花朵必须是同一种花朵。3)只要正方形矩阵四个顶点不重合就算作不同的正方形矩阵(有部分区域重叠或者大正方形矩阵包含小正方形矩阵,按不同的正方形矩阵计算)。已知方格纸的行数N(2≤N≤30)和列数M(2≤M≤30),及每个小正方形方格中花朵的种类,请帮助小明计算出,按要求有多少个正方形矩阵需要涂色。例如:N=4,D=5,矩阵如下图:其中有3个正方形矩阵需要涂抹颜料(蓝色框区域和绿色区域的矩阵部分重叠按2个计算)。输入描述:第一行输入两个正整数N(2≤N≤30)和M(2≤M≤30),N表示矩阵方格的行数,M表示矩阵方格的列数,两个正整数之间以一个空格隔开。第二行开始输入N行,每行M个字符(字符只包含a、b、c),字符之间以一个空格隔开。输出描述:输出一个整数,表示N*M的矩阵方格纸中,需要涂抹颜料正方形矩阵的个数。样例输入:45bbcbabbacbcbaaaabaaa样例输出:3参考程序:#include<bits/stdc++.h>usingnamespacestd;charc[33][33];intn,m,ans;boolcheck(intx,inty,intf){charch=c[x][y];for(inti=x;i<x+f;i++)for(intj=y;j<y+f;j++)if(ch!=c[i][j])return0;return1;}signedmain(){cin>>n>>m;for(inti=1;i<=n;i++)for(intj=1;j<=m;j++)cin>>c[i][j];for(inti=2;i<=min(n,m);i++)for(intx=1;x<=n;x++)for(inty=1;y<=m;y++)ans+=check(x,y,i);cout<<ans;}10.公园树木。题目描述:某公园有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。样例输入:1011.02.31.21.71.12.01.81.81.21.9样例输出:4参考程序:#include<bits/stdc++.h>usingnamespacestd;intn,a[1111],f[1111],f1[1111],ma;signedmain(){cin>>n;for(inti=1;i<=n;i++){doublex;cin>>x;a[i]=int(x*10);}for(inti=1;i<=n;i++)for(intj=1;j<i;j++)if(a[j]<a[i])f[i]=max(f[i],f[j]+1);for(inti=n;i>=1;i--)for(intj=n;j>i;j--)if(a[j]<a[i])f1[i]=max(f1[i],f1[j]+1);for(inti=1;i<=n;i++){if(!f[i]||!f1[i])continue;ma=max(ma,f[i]+f1[i]+1);}if(!ma)cout<<-1;elsecout<<n-ma;}2023年2月第14届蓝桥杯C++编程青少组(选拔赛_中高级)真题(含答案)。一、单选题。1.以下哪个选项可以作为变量名称?()。A.floatB._5bC.2_abD.n!c标准答案:B。2.已知:charstr[]="HelloWorld";以下哪个函数可以正确输出str的长度?()。A.sizeof()B.strlen()C.size()D.length()标准答案:A。3.以下字符数组初始化正确的是()。A.chara[3]={"a","b","c"}B.charb[3]={'a'}C.charc[]={'abc'}D.chard[3]={"abc"}标准答案:B。4.关于结构体,以下说法正确的是()。A.结构体的成员变量默认可以在结构体外部访问B.结构体的成员变量不能是结构体类型C.结构体类型的变量不能充当函数的参数D.当结构体的成员变量含有数组时,不能直接对结构体变量进行赋值。标准答案:A。5.已知:intm=8;下列正确的引用方法是()。标准答案:D。二、编程题。6.求和。题目描述:给定一个正整数N(1<N<106),求出N左右相邻两个正整数的和。例如:N=6,左边相邻的数为5,右边相邻的数为7,两数之和为12(12=5+7)。输入描述:输入一个正整数N(1<N<106)。输出描述:输出一个整数,表示N左右相邻两个正整数的和。样例输入:6样例输出:12参考程序:#include<bits/stdc++.h>usingnamespacestd;intmain(){intn;cin>>n;cout<<(n-1)+(n+1)<<endl;}7.奇数。题目描述:给定两个正整数N和M(10≤N<M≤10000),请找出N到M之间(包含N和M)的所有正整数中,哪些正整数的各个位上的数字都为奇数,并输出N到M之间共有多少个这样的正整数。例如:N=110,M=119。110到119之间的所有正整数有110、111、112、113、114、115、116、117、118、119。其中各个位上的数字都为奇数的有111、113、115、117、119,共5个。输入描述:输入两个正整数N和M(10≤N<M≤10000),正整数之间以一个英文逗号隔开。输出描述:输出N到M之间(包含N和M)的所有正整数中,各个位上的数字都为奇数的个数。样例输入:110,119样例输出:5参考程序:#include<bits/stdc++.h>usingnamespacestd;intmain(){intn,m;cin>>n>>m;intans=0;for(inti=n;i<=m;i++){intj=i;boolflag=true;while(j){if(j%2==0){flag=false;break;}j/=10;}if(flag==true){ans++;}

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论