2019年蓝桥杯省赛真题题解B组

编程入门 行业动态 更新时间:2024-10-05 11:17:18

2019年蓝桥杯省赛真题<a href=https://www.elefans.com/category/jswz/34/1769599.html style=题解B组"/>

2019年蓝桥杯省赛真题题解B组

A、数列求值

题目描述

给定数列1, 1, 1, 3, 5, 9, 17, …,从第4 项开始,每项都是前3 项的和。求
第20190324 项的最后4 位数字。

代码:

#include <bits/stdc++.h>
using namespace std;
int main()
{long long int f1=1;long long int f2=1;long long int f3=1;long long int f=0;for(int i=4;i<=20190324;i++){f=(f1+f2+f3)%10000;f1=f2;f2=f3;f3=f;}cout<<f;return 0;
}

B、完全二叉树的值

题目描述

给定一棵包含N 个节点的完全二叉树,树上每个节点都有一个权值,按从
上到下、从左到右的顺序依次是A1, A2, AN,如下图所示:



现在小明要把相同深度的节点的权值加在一起,他想知道哪个深度的节点
权值之和最大?如果有多个深度的权值和同为最大,请你输出其中最小的深度。
注:根的深度是1。

输入格式

第一行包含一个整数N。
第二行包含N 个整数A1, A2, AN
对于所有评测用例,1<=N<=100000, -100000<=Ai<=100000。

输出格式

输出一个整数代表答案。

输入样例 复制

7
1 6 5 4 3 2 1

输出样例 复制

2

代码:

#include <bits/stdc++.h>
using namespace std;
int a[100010];
#define INF 0x3f3f3f3f
int main()
{int n;cin>>n;for(int i=1;i<=n;i++){cin>>a[i];}long long int maxsum=-INF,sum=0;int k=0,pos=1;for(int i=1;;i++){if(pow(2,i)>=n+1){k=i;break;}}int ans=1,f=0;for(int i=1;i<=k;i++){sum=0;for(int j=1;j<=pow(2,i-1);j++){sum+=a[ans++];if(ans>n){f=1;break;}}if(sum>maxsum){maxsum=sum;pos=i;}}cout<<pos;return 0;
}

C、组队 

题目描述

作为篮球队教练,你需要从以下名单中选出1 号位至5 号位各一名球员,组成球队的首发阵容。
每位球员担任1号位至5号位时的评分如下表所示。请你计算首发阵容1号位至5号位的评分之和最大可能是多少?


该表格可以参考team.txt

解题思路:

这道题直接看图就可以做

代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{cout<<97+99+99+97+98;return 0;
}

D、年号字串

题目描述

小明用字母A 对应数字1,B 对应2,以此类推,用Z 对应26。对于27以上的数字
小明用两位或更长位的字符串来对应,例如AA 对应27,AB 对应28,AZ 对应52,LQ 对应329。
请问2019 对应的字符串是什么?

解题思路:

这题我是用笔算的。2019%26=17,这个余数一定是最后一个字符,2019=(2*26+25)*26+17(就是一直对26取余),=2*26^2+25*26+17,所以2对应B,对应Y,17对应Q。结果就是BYQ

答案:BYQ

E、数的分解

题目描述

把2019分解成3个各不相同的正整数之和,并且要求每个正整数都不包含数字2和4,一共有多少种不同的分解方法?
注意交换3个整数的顺序被视为同一种方法,例如1000+1001+18 和1001+1000+18 被视为同一种。

解题思路:

这道题目之前我单独发过一次博客,是我上次参加蓝桥杯之前写的,现在我又写一遍,上次的进行了优化,这次的没有,由于是填空题,所以也就没必要费精力。

代码:

#include<bits/stdc++.h>
using namespace std;
bool panduan(int n)
{while(n){if(n%10==2||n%10==4)return false;n/=10;}return true;
}
int main()
{int ans=0;for(int i=1;i<2019;i++){if(!panduan(i))continue;for(int j=i+1;j<2019-a;j++){int k=2019-i-j;if(k<=0)break;else if(k<=j)break;else if(panduan(j)&&panduan(k)){ans++;}}}cout<<ans;return 0;
}

F、特别数的和

题目描述

小明对数位中含有2、0、1、9 的数字很感兴趣(不包括前导0)
在1到40中这样的数包括1、2、9、10 至32、39 和40,共28 个,他们的和是574。
请问,在1到n 中,所有这样的数的和是多少?

输入格式

输入一个正整数n(1<=n<=10000)

输出格式

输出一行,包含一个整数,表示满足条件的数的和。

输入样例 复制

40

输出样例 复制

574

解题思路:

暴力求解

代码:

#include<bits/stdc++.h>
using namespace std;
bool panduan(int n)
{while(n){if(n%10==2||n%10==0||n%10==1||n%10==9)return true;n/=10;}return false;
}
int main()
{int n;cin>>n;int sum=0;for(int i=1;i<=n;i++){if(panduan(i))sum+=i;}cout<<sum;return 0;
}

G、等差数列

题目描述

数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一部分的数列,只记得其中N 个整数。
现在给出这N 个整数,小明想知道包含这N 个整数的最短的等差数列有几项?

输入格式

输入的第一行包含一个整数N。
第二行包含N 个整数A1.A2,..., AN。(注意A1<=AN 并不一定是按等差数列中的顺序给出)
2<=N<=100000,0<=Ai<=10^9

输出格式

输出一个整数表示答案。

输入样例 复制

5
2 6 4 10 20

输出样例 复制

10

数据范围与提示

包含2、6、4、10、20 的最短的等差数列是2、4、6、8、10、12、14、16、18、20。

解题思路:

想求出最少的项,就必须保证求出最大的公差,对数列进行排序,我们知道,后面的每一项和第一项的差都是公差的最小公倍数,所以,我们求出它们之间的差值,然后求出这些差值中的最大公约数就可以。

代码:

#include<bits/stdc++.h>
using namespace std;
long long int a[100010];
#define INF 0x3f3f3f3f
long long int b[100010];
int main()
{int n;cin>>n;long long int minnum=INF;long long int maxnum=-INF;for(int i=1;i<=n;i++){cin>>a[i];minnum=min(minnum,a[i]);maxnum=max(maxnum,a[i]);}sort(a+1,a+n+1);long long int maxy=INF;int k=1;for(int i=2;i<=n;i++){b[k++]=a[i]-a[1];}int f=0;for(int i=2;i<k;i++){if(b[i-1]==0||b[i]==0){f=1;break;}maxy=min(maxy,__gcd(b[i],b[1]));}//cout<<maxy<<endl;int m;if(f){m=n;}elsem=(maxnum-minnum)/(maxy)+1;//elsecout<<m;return 0;
}

H、后缀表达式

题目描述

给定N 个加号、M 个减号以及N + M + 1 个整数A1,A2,...,AN+M+1
小明想知道在所有由这N 个加号、M 个减号以及N + M +1 个整数凑出的合法的后缀表达式中,结果最大的是哪一个?
请你输出这个最大的结果。
例如使用1 2 3 + -,则“2 3 + 1 -” 这个后缀表达式结果是4,是最大的。

输入格式

第一行包含两个整数N 和M。
第二行包含N + M + 1 个整数A1,A2,...,AN+M+1
0<=N,M<=100000,-10^9<=Ai<=10^9

输出格式

输出一个整数,代表答案。

输入样例 复制

1 1
1 2 3

输出样例 复制

4

 解题思路:

如果没有负号,那么就是直接将所有的数相加即可;

若既有负号又有正号,那么必然会有最大的数-最小的数,然后其余的数直接用绝对值相加;

代码:

#include<bits/stdc++.h>
using namespace std;
long long int b[200100];
int cmp(int a,int b)
{return a>b;
}
int main()
{int n,m;cin>>n>>m;for(int i=1;i<=n+m+1;i++){long long int x;cin>>x;b[i]=x;}long long int sum=0;if(!m){for(int i=1;i<=n+m+1;i++)sum+=b[i];cout<<sum;return 0;}sort(b+1,b+n+m+2,cmp);sum+=b[1];sum-=b[n+m+1];for(int i=2;i<n+m+1;i++)sum+=abs(b[i]);cout<<sum;return 0;
}

最后一道编程题看到题目就果断放弃了,还有一个填空题迷宫,没写,迷宫后期会补上。 

更多推荐

2019年蓝桥杯省赛真题题解B组

本文发布于:2024-02-07 10:50:26,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1756085.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:题解   真题   年蓝桥杯省赛

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!