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

下载本文档

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

文档简介

2024年8月第15届蓝桥杯C++编程青少组(省赛_中级)真题(含答案)一、单选题。1.定义chara[]="hello\nworld",执行cout<<a,输出结果是()。A.helloworldB.helloworldC.hellonworldD.hello\nworld标准答案:B。2.题(11001010)2+(F8)A.(B.(C.(D.(标准答案:C。3.表达式4%12的结果是()。A.0B.4C.3D.12标准答案:B。4.下列选项中,逻辑表达式的值始终与B的真假无关的是()。A.(!A||B)&&AB.(A||B)&&(A&&B)C.(A&&!A)||BD.(A||B)&&(A||!B)标准答案:D。5.运行下面程序,输出结果是()。#include<bits/stdc++.h>usingnamespacestd;inta[6]={16,8,32,10,9,21};intfunc(intL,intR,intd){if(L>R)return0;intsum=0,m=a[L],index=L;for(inti=L+1;i<=R;i++){if(m<a[i]){m=a[i];index=i;}}intlt=func(L,index-1,d+1);intrt=func(index+1,R,d+1);returnlt+rt+m*d;}intmain(){cout<<func(0,5,1)<<endl;system("pause");return0;}A.196B.197C.198D.199标准答案:A。二、编程题。6.读书。题目描述:一本书共n页,小明计划第一天看x页,此后每一天都要比前一天多看y页,请问小明几天可以看完这本书?输入格式:一行输入三个整数n,x,y(20≤n≤5000),(1≤x,y≤20),分别表示书的总页数、计划第一天看的页数以及此后每天都要比前一天多看的页数,整数之间以一个空格隔开。输出格式:输出一个整数,表示小明几天可以看完这本书。样例输入:100105样例输出:5参考程序:#include<bits/stdc++.h>usingnamespacestd;intn,x,y;intmain(){cin>>n>>x>>y;intsum=x;//第一天看的页数。inti=1;while(sum<n){//看过的总页数小于n时,继续看。i++;//第i天。x+=y;//第i天看的页数。sum+=x;//第i天看的总页数。}cout<<i<<endl;return0;}7.数字交换。题目描述:前导0:整数前对数值无影响的0。例如:0201去除前导0后为201。00321去除前导0后为321。给定一个正整数n,请将n的最高位与最低位的数字进行交换,并输出交换后的结果。如果交换后的结果有前导0,去除前导0后再输出结果。例1:n=173,将173的最高位1与最低位3交换,交换后的结果为371。例2:n=10200,将10200的最高位1与最低位0交换,交换后的结果为00201,结果有前导0,去除前导0后的结果为201。输入格式:输入一个正整数n(100<=n<=109)。输出格式:输出一个整数,表示将n的最高位与最低位的数字交换后的结果如果交换后的结果有前导0,去除前导0后再输出结果。样例输入:173样例输出:371参考程序:#include<bits/stdc++.h>usingnamespacestd;intn,a[10];intmain(){cin>>n;while(n%10==0)n/=10;//去掉末尾的0。inti=0;while(n){//把n分解为各个数位。a[++i]=n%10;n/=10;}cout<<a[1];//输出低高位。for(intj=i-1;j>=2;j--)cout<<a[j];//从高到低输出中间位。cout<<a[i]<<endl;//输出最高位。return0;}8.出现奇数次的数。题目描述:奇数:指不能被2整除的整数。例如:3、5是奇数;4、6不是奇数。给定n个整数,其中只有一个数出现了奇数次,请找出这个数。例如:7个整数为6、2、4、6、4、2、6,其中只有6出现了奇数次故输出6。输入格式:第一行输入一个整数n(1<=n<105)。第二行输入n个整数(1≤整数≤109)整数之间以一个空格隔开(数据保证只有一个数出现了奇数次)。输出格式:输出一个整数,表示出现了奇数次的数。样例输入:76246426样例输出:6参考程序:#include<bits/stdc++.h>usingnamespacestd;map<int,int>a;intn;intmain(){cin>>n;for(inti=1,x;i<=n;i++){cin>>x;a[x]++;//统计每个数字出现的次数。}for(map<int,int>::iteratorit=a.begin();it!=a.end();it++){if(it->second&1){//如果该数字出现的次数为奇数,则输出。cout<<it->first<<endl;return0;}}return0;}#include<bits/stdc++.h>usingnamespacestd;intmain(){intn;cin>>n;intres=0;for(inti=0,x;i<n;i++){cin>>x;//任何数与自己异或的结果是0。//任何数与0异或还是其本身。res^=x;}cout<<res;return0;}9.字母移位。题目描述:字母移位:表示将字母按照字母表的顺序进行移动。例如:'b'向右移动一位是'c','f'向左移动两位是'd'。特别地,'a'向左移动一位是'z','z'向右移动一位是'a'。给定一个仅包含小写字母且长度为n的字符串s,以及n个正整数a1,a2,a3,…,an,接下来对字符串s按如下规律操作:将第1位字符向左移动a1位。再将第1、2位字符都向右移动a2位。再将第1、2、3位字符都向左移动a3位。再将第1、2、3、4位字符都向右移动an位。以此类推,直到将s的第1到第n位字符都(按规律向左或向右)移动ai位。最后,将操作完成后的字符串s输出。例如:n=5,字符串s="abcde",5个正整数为1,3,5,7,9。将"abcde"的第1位字符"a"向左移动1位,s变为"zbcde"。再将"zbcde"的前2位字符"zb"向右移动3位,s变为"cecde"。再将"cecde”的前3位字符"cec"向左移动5位,s变为"xzxde"。再将"xzxde"的前4位字符"xzxd"向右移动7位,s变为"egeke"。再将"egeke"的前5位字符"egeke"向左移动9位,s变为"vxvbv"。最后,将操作完成后的字符串"vxvbv"输出。输入格式:第一行输入一个整数n(1<=n<=105)。第二行输入一个仅包含小写字母且长度为n的字符串s。第三行输入n个整数a1、a2…an(1<=a<=109),整数之间以一个空格隔开。输出格式:输出一个字符串,表示操作完成后的字符串S。样例输入:5abcde13579样例输出:vxvbv参考程序:#include<bits/stdc++.h>usingnamespacestd;intn,a[100005];chars[100005];intmain(){cin>>n>>s;for(inti=0;i<n;i++)cin>>a[i];for(inti=n-1;i>=0;i--){//倒着算。if(i&1)a[i]=(a[i+1]+a[i])%26;//奇数位。elsea[i]=(a[i+1]-a[i])%26;//偶数位。}for(inti=0;i<n;i++)s[i]=((s[i]-'a'+a[i])%26+26)%26+'a';//处理字母。cout<<s<<endl;return0;}10.游戏任务。题目描述:有一款新游戏,通关这个游戏需要完成n个任务,这n个任务可按任意次序完成,每个任务设置了启动能量值和完成任务消耗的能量值,且消耗的能量值小于等于该任务的启动能量值,如果玩家当前的能量值低于该任务启动能量值则不能开始该任务。例1:玩家当前的能量值为7,当前任务的启动能量值为5,完成任务消耗的能量值为3,则可以开始该任务,完成任务后玩家剩余能量值为4。例2:玩家当前的能量值为5,当前任务的启动能量值为8,则无法开始该任务。游戏开始时玩家需要一个初始能量值用来完成这几个任务,当给定每个任务的启动能量值和完成任务消耗的能量值,请问初始能量的最小值是多少?例如:n=3,这3个任务的启动能量值和完成任务消耗的能量值分别是:(2,2)、(9,5)、(7,4),那么玩家初始能量的最小值为12。可按照如下顺序完成任务:完成任务(9,5),玩家剩余能量值为7。完成任务(7,4)玩家剩余能量值为3。完成任务(2,2),玩家剩余能量值为1。尽管最后玩家的能量值还剩余1,但是初始能量值无法再降低,否则完成任务(9,5)后,玩家的剩余能量值会小于任务(7,4)的启动能量值,导致无法开始该任务。输入格式:共n+1行。第一行输入一个整数n(1≤n≤10^5),表示游戏的任务数量。接下来n行,每行输入两个整数x,y(1≤y≤x≤1000),分别表示当前任务所需的启动能量值和完成任务所消耗的能量值,整数之间以一个空格隔开。输出格式:输出一个整数,表示玩家要完成这n个任务需要的初始能量的最小。输入样例:3229574输出样例:12参考程序:#include<bits/stdc++.h>usingnamespacestd;intn;structnode{intx,y;booloperator<(constnode&a)const{return!(x-y<=a.x-a.y);//能量差值大的排前面。}}a[110];intmain(){cin>>n;for(inti=0,x,y;i<n;i++){cin>>a[i].x>>a[i].y;}sort(a,a+n);//排序。intans=a[0].x,tmp=a[0].x;for(inti=0;i<n;i++){if(a[i].x>tmp){//初始能量不足以启动任务。tmp=a[i].x-tmp;//最小需要增加的能量。ans+=tmp;//增加能量。tmp=a[i].x;//贪心更新启动能量。}tmp=tmp-a[i].y;//消耗能量。}cout<<ans;return0;}11.价值分组。题目描述:n件物品排成一排,编号分别为:1、2、3…n的价值分别为:a1、a2、a3…an。请将这n件物品拆分为K组(不改变物品的顺序),要求每组内至少有一件物品,分别统计每组物品的价值之和,并找出其中的最大值。请设计一种分组方案,使这个最大值尽可能小,并输出这个最大值。例如:n=5,表示有5件物品,这5件物品的价值分别是6、1、3、8、4;K=2,表示要将这5件物品拆分为两组,有如下方案:[6]和[1,3,8,4],两组物品各自的价值之和为6和16,最大值为16。[6,1]和[3,8,4],两组物品各自的价值之和为7和15,最大值为15。[6,1,3]和[8,4],两组物品各自的价值之和为10和12,最大值为12。[6,1,3,8]和[4],两组物品各自的价值之和为18和4,最大值为18。其中第3种方案,价值之和的最大值12在4种方案中最小,故输出12。输入格式:第一行输入一个整数n(1≤n≤1000),表示物品的数量。第二行输入n个整数a1、a2,…an(1≤ai≤105),ai表示i号物品的价值,整数之间以一个空格隔开。第三行输入一个整数k(1≤k≤n),表示将n件物品拆分的组数。输出格式:输出一个整数,表示按照题目要求得到的最大值。样例输入:561384样例输出:12参考程序:#include<bits/stdc++.h>usingnamespacestd;intn,k,a[1005];boolchec

温馨提示

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

评论

0/150

提交评论