蓝桥杯c++试题a组,蓝桥杯c++b组试题
第十届蓝桥杯C B组题目分析及答案
第一个问题:
作为篮球队的教练,你需要从下面的列表中选择1号位到5号位的一名球员,
组成球队首发阵容。
每个玩家在1号到5号位置的得分如下表所示。请计算首发阵容1。
5号到5号的分数最大可能和是多少?
方法:excel
答案:490
(计算每列的最大值并加上()。这是不小心,但这是错误的。)
第二个问题:
小明的字母A对应数字1,B对应2,以此类推,Z对应26。27岁
对于以上数字,小明用一串两个或两个以上的数字来对应,比如AA对应27,AB对。
应该是28,阿兹对应52,LQ对应329。
2019对应的弦是什么?
思路:十进制换算(折腾除法3354除以26)
答案:BYQ
第三个问题:
给定序列1,1,1,3,5,9,17,…,从第4项开始,每一项都是前3项之和。要求
项目20190324的最后4位数字。
思路:斐波那契数列(三项),每次得到的数据是000。
答案:4659
#包括
#包括
使用命名空间std
int a[2019 03 24];
int main(){
a[1]=1;
a[2]=1;
a[3]=1;
for(int I=4;i=20190324i) {
a[I]=(a[I-1]a[I-2]a[I-3])% 10000;
}
printf(%d\n ,a[2019 03 24]);
返回0;
}第四个问题:
2019分解为三个不同的正整数之和,要求每个正整数都是唯一的。
包括数字2和4,有多少种不同的分解方法?
注意交换3个整数的顺序视为同一方法,如1000 1001 18和
1001 10018算是同类。
思路:求范围内不包含2和4的数之和(string find==string:npos)
答案:40785
参考代码:
#包括
#包括
#包括
使用命名空间std
int a[2020];
void i2s(int i,string s){
stringstream流;
流I;
流s;
}
int main(){
字符串str
int len=0;
for(int I=1;i 2019i) {
i2s(我,str);
if(str . find( 2 )==string:NPOs str . find( 4 )==string:NPOs)a[len]=I;
}
//for(int j=0;j lenj) {
//printf(%d\n ,a[j]);
//}
int ans=0;
for(int j=0;j lenj) {
for(int I=j 1;我leni) {
for(int k=I 1;k lenk) {
if(a[I]a[j]a[k]==2019)ans;
}
}
}
printf(%d ,ans);
返回0;
}第五个问题:
创意:BFS
答:ddddrrrrrrrrrrrrrrrrrrrdddddddddddddddddrrrrrrrrrrrrrrrddrrrrrrrrrrrrrrrrrrrrddrrddrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrddrrrrrrrrrrddrrrrrrrrrrrrddrrrrddrrrrrrrrddrrrrrrddrrrrrrddrrrrddrrrrddrrrrddrrrrddrrrrddrrrrddrrrrddrrrrddrrddrrrrddrrddrrddrrddrrddrrddrrddrrddrrddrrddrrddrrddrrddrrddrrddrrddrrddr
参考代码:
#包括
#包括
#包括
#包括
使用命名空间std
int m,n;
char MP[510][510];//地图
bool vis[510][510]={ false };//标记是否被访问过。
int dir[4][2]={{1,0},{0,-1},{0,1},{-1,0 } };//移动方向,参考字典顺序。
char dirc[4]={D , L , R , U };//按照字典顺序,上下左右排序。
结构点{//结构问题:坐标x,y,步数step,路径字符串
int x,y,step
字符串str
Point(int _x,int _y,int _step,string _str):x(_x),y(_y),step(_step),str(_str){}
};
队列点q;
void bfs(int x,int y){
q.push(Point(x,y,0, ));//将起始位置推入堆栈
vis[x][y]=true;//标记为已访问
而(!Q.empty()){//堆栈不为空时循环
点now=q . front();//获取当前队列头元素
q . pop();//获取团队元素的信息,出列。
If(now.x==m-1 now.y==n-1){//当位置到达末尾时,输出
printf(%d\n ,now . step);
cout now.str endl
打破;
}
for(int I=0;I 4;I) {//在四个方向遍历数组,依次是下、左、右、上。
int dx=now . x dir[I][0];//移动后的横坐标
int dy=now . y dir[I][1];//移动的纵坐标
//当位置越界、已访问或不可通行时,重新开始循环。
if(dx 0 dx=m dy 0 dy=n vis[dx][dy]==true MP[dx][dy]= 1 )
继续;
Else{//将当前位置推入队列,并将其标记为已访问
q.push(Point(dx,dy,now.step 1,now . str dirc[I]);
vis[dx][dy]=true;
}
}
}
}
int main(){
scanf(%d%d ,m,n);//输入地图的行和列
for(int I=0;我是m;I) {//进入地图
scanf(%s ,MP[I]);
}
bfs(0,0);
返回0;
}
第六题:
思路:求一个范围内,包含2019的数字这四个数字的之和(字符串find==string:npos)
参考代码:
#包括
#包括
#包括
使用命名空间标准
int a[2020];
void i2s(int i,string s){
字符串流流;
流我;
流s;
}
int main(){
int n;
scanf(%d ,n);
字符串潜艇用热中子反应堆(submarine thermal reactor的缩写)
int len=0;
for(int I=1;I=n;i) {
i2s(我,str);
if(str.find(2 )!=string:npos str.find(0 )!=string:npos
str.find(1 )!=string:npos str.find(9 )!=string:NPO)
a[len]=I;
}
long long ans=0;
//printf(%d\n ,len);
for(int j=0;lenj) {
ans=a[j];
}
printf(%lld ,ans);
返回0;
}第七题:
思路:根据每次输入比较,最后输出最大的层数(:完全二叉树,不一定是满二叉树【每一层都是2^n】)
参考代码:
#包括
#包括
typedef long long LL
int main(){
int n;
scanf(%d ,n);
LL最大值=长时间最小值
LL max _ depth=0;
for (int i=0,深度=1,长度=1;I n;我,深度,长度*=2) {
LL sum=0;
for(int j=0;j长度I n;j,i ) {
LL x;
scanf(%lld ,x);
sum=x;
}
if(sum max_value){
最大值=总和
最大深度=深度;
}
}
printf(%lld\n ,max _ depth);
返回0;
}第八题:
后缀和,求一组数字加上、-号的最大值。(分类讨论)
#包括
#包括
使用命名空间标准
int gcd(int a,int b){//求最小公约数
return b==0?a : gcd(b,a % b);
}
int a[100005];
int main(){
int n;
scanf(%d ,n);
for(int I=0;I n;i) {
scanf(%d ,a[I]);
}
sort(a,a n);//从小到大排序
int temp=a[0];
for(int j=1;j n;j) {//每一项减去首项
a[j]-=temp;
}
int d=a[1];//公差
for(int k=2;k n;k) {//根据an=a1 (n -1)*d - an - a1=(n-1)*d
d=gcd(d,a[k]);
}
if(d==0){
printf(%d ,n);
}否则{
printf(%d ,a[n-1]/d 1);//根据an=a1(n-1)* d-n=(an-a1)/n-1
}
返回0;
}第九题:
第十题:
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。