2019第十届蓝桥杯大赛软件类省赛C++ C组真题题解
==============================
2019-2021蓝桥杯C++ C组真题题解:
2019第十届蓝桥杯大赛软件类省赛C++ C组真题题解
2020第十一届蓝桥杯大赛软件类省赛第二场C++ C组真题题解
2021第十二届蓝桥杯大赛软件赛省赛C++ C组真题题解
==============================
目录
- 试题A:求和(5分)
- 试题B:矩形切割(5分)
- 试题A:年号字串(10分)
- 试题D:质数(10分)
- 试题E:最大降雨量(15分)
- 试题F:旋转(15分)
- 试题G:外卖店优先级(20分)
- 试题H:人物相关性分析(20分)
- 试题I:等差数列(25分)
- 试题J:扫地机器人(25分)
试题A:求和(5分)
题目分析:
枚举所有数,将每个数的每位取出判断即可
题目代码:
#include <bits/stdc++.h>
using namespace std;
bool judge(int n)//判断某个数是否有2、0、1、9
{while(n>0){int tmp=n%10;if(tmp==2||tmp==0||tmp==1||tmp==9)return true;n=n/10;}return false;
}
int main()
{int tot=0;for(int i=1;i<=2019;i++){if(judge(i))tot+=i;}cout<<tot<<endl;return 0;
}
题目答案:
1905111
试题B:矩形切割(5分)
题目分析:
其实就是比较两个边,边相等则是正方形,边不等则大边等于大边减小边
题目代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{int width=2019,height=324;int tot=0;while(width!=height){if(width<height){height-=width;}else{width-=height;}tot++;}tot++;cout<<tot<<endl;return 0;
}
题目答案:
21
试题A:年号字串(10分)
题目分析:
这相当于就是进制问题,10进制是逢10进1,这个是逢26进1,所以这个就是26进制。我们就需要通过进制计算得出2019由26进制表达
题目代码:(注意代码得出的是反序,因为先打印的个位)
#include <iostream>
using namespace std;
int main()
{int n=2019;while(n!=0){int mid=n%26;//取出一位char chr='A'+mid-1;//将其转化为字母cout<<chr;n=n/26;}return 0;
}
题目答案:
BYQ
试题D:质数(10分)
题目分析:
枚举,直到2019个素数
题目代码:
#include <bits/stdc++.h>
using namespace std;
int IsPrime(int n){//求解是否是素数int i;if(n==2)return 1;if(n%2==0) return 0;for(i = 3;i <= sqrt(n);i+=2){if(n%i==0) return 0;}return 1;
}
int main()
{int tot=0,i=2;while(1){if(IsPrime(i))tot++;if(tot==2019)break;i++;}cout<<i<<endl;return 0;
}
题目答案:
17569
试题E:最大降雨量(15分)
题目分析:
因为求降雨量最大是求七周的中位数,所以可以让前三周尽量小
这样就转换为求最后四周中最小的一周尽量大(因为它是中位数)
求最小周最大,根据经验可知,则将它们平均分即可
即1-21(不管)22-33(后四周的前三天)34-37(后四周的中位数)38-49(后四周的后三天)
题目代码:
无
题目答案:
34
试题F:旋转(15分)
题目分析:
本题输入为一行一行,输出为一列一列
使用二位数组保存数字,按照规则输出即可
题目代码:
#include <bits/stdc++.h>
using namespace std;
int num[105][105];
int main()
{int n,m;cin>>n>>m;//i表示行,j表示列for(int i=0;i<n;i++){for(int j=0;j<m;j++){cin>>num[i][j];}}//i表示行,j表示列for(int j=0;j<m;j++){for(int i=n-1;i>=0;i--){cout<<num[i][j]<<" "; }cout<<endl;}return 0;
}
试题G:外卖店优先级(20分)
题目分析:
这道题首先要保存ts时刻,id店收到订单的信息(我使用map存入)
需要有数组保存当前时刻的优先级(更好进行处理)
需要有数组记录当前时刻每个门店是否进入优先级(因为进入和退出的标准不一样)
枚举每个时间段:
1.外卖店有订单,则优先级+3(如果外卖店已经有过订单则+2)
2.枚举每一家外卖店
将每一家外卖店优先级-1
如果优先级>5则 加入优先缓存
如果优先级<3则 退出优先缓存
如果优先级<0则 优先级为0
题目代码:
#include <bits/stdc++.h>
using namespace std;
map<int,vector<int>> m;//每个时间段的收到订单的外卖店
int shop[100005];//保存每家店的优先级
bool shop_enter[100005];//是否进入优先缓存
int main()
{int N,M,T,ts,id;cin>>N>>M>>T;for(int i=0;i<M;i++)//将每个时间段的id放入{cin>>ts>>id;m[ts].push_back(id);}for(int j=1;j<=T;j++)//枚举每个时间段{sort(m[j].begin(),m[j].end());//将这个时间段的id排序int first=-1;for(int i=0;i<m[j].size();i++)//处理有订单的外卖店{if(m[j][i]!=first){//如果第一次订单shop[m[j][i]]+=3;}else{//如果已有订单shop[m[j][i]]+=2;}first=m[j][i];}for(int i=1;i<=N;i++)//处理每家店{shop[i]--;if(shop[i]>5)shop_enter[i]=1;else if(shop[i]<=3)shop_enter[i]=0;if(shop[i]<0)shop[i]=0;}cout<<endl;}int tot=0;for(int i=1;i<=N;i++)//计算有多少家{if(shop_enter[i])tot++;}cout<<tot<<endl;return 0;
}
试题H:人物相关性分析(20分)
题目分析:
首先将Alice和Bob的位置存入相应的容器
然后循环Alice的每一个位置,用l存放Bob的左边,用r存放Bob的右边,一直进行更新(只有这种才能保证不超时)
题目代码:
#include <bits/stdc++.h>
using namespace std;
vector<int> Alice;
vector<int> Bob;
int main() {int K;string s;cin>>K;getchar();getline(cin,s);//读取一行字符串int size=s.size();s=s+" ";//后面添加四个空格,防止溢出char before=' ';//保证单词前面的独立for(int i=0; i<size; i++) {if(s[i]=='A'&&(before==' '||before=='.')) {//保证单词前面独立if(s[i+1]=='l'&&s[i+2]=='i'&&s[i+3]=='c'&&s[i+4]=='e'&&(s[i+5]==' '||s[i+5]=='.')) {//保证单词后面独立Alice.push_back(i+2);}}if(s[i]=='B'&&(before==' '||before=='.')) {if(s[i+1]=='o'&&s[i+2]=='b'&&(s[i+3]==' '||s[i+3]=='.')) {Bob.push_back(i+1);}}before=s[i];}int l=0,r=0;long long tot=0;for(int i=0;i<Alice.size();i++)//用l,r保证区间{while(l<Bob.size()&&Alice[i]-Bob[l]-4>K){l++;}while(r<Bob.size()&&Bob[r]-Alice[i]-4<=K){r++;}tot+=r-l;}cout<<tot<<endl;return 0;
}
试题I:等差数列(25分)
题目分析:
1.最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个(我们可以将所有的差值进行两两最大公约数就可以找出最大的公约数)
2.因为顺序不是按从大到小,所以进行排序
3.等差数列可以为0,当差值为0时,则返回数字的个数
题目代码:
#include <bits/stdc++.h>
using namespace std;
long long num[100005];
int difference[100005];
int main()
{int N;cin>>N;for(int i=0;i<N;i++)//读取数值{cin>>num[i];}sort(num,num+N);for(int i=1;i<N;i++)//将差值求出{difference[i-1]=num[i]-num[i-1];}int d=difference[0];for(int i=1;i<N-1;i++)//将差值两两求最大公约数{d=__gcd(d,difference[i]);}if(d==0){cout<<N<<endl;}else{cout<<(num[N-1]-num[0])/d+1<<endl;}return 0;
}
试题J:扫地机器人(25分)
题目分析:
首先我们知道扫地机器人扫一边还是扫两边只要格数相同则时间一样
其实我们将扫地机器人的两边都转化为数字就可以知道
这下我们换个思路想:其实就是将这些数字每次选择一边减一,直到所有数字为0
那么我们就遍历,判断两边(如果左边数字大一点,就选择扫左边),直到所有数字都小于0
题目代码:
#include <bits/stdc++.h>
using namespace std;
int A[100005];//存放扫地机器人的位置
int clean[100005];//存放机器人之间的位置差
int main() {int N,K;cin>>N>>K;for(int i=1; i<=K; i++)cin>>A[i];sort(A+1,A+K+1);//对机器人排序int first=0;for(int i=1; i<=K; i++) {//计算机器人之间的位置差clean[i]=A[i]-first-1;first=A[i];}clean[K+1]=N-first;//最后一个机器人和右边的位置差int tot=0;while(1) {bool clean_up=true;tot++;for(int i=1; i<=K; i++) {//遍历一遍if(clean[i]>=clean[i+1])clean[i]--;//如果左边大于等于右边else clean[i+1]--;if(clean[i]>0)clean_up=false;}if(clean[K+1]>0)clean_up=false;if(clean_up)break;}cout<<tot*2<<endl;return 0;
}
2019第十届蓝桥杯大赛软件类省赛C++ C组真题题解相关推荐
- 2019第十届蓝桥杯大赛软件类省赛C++ B组真题题解
========================================== 2019-2021蓝桥杯C++ B组真题题解: 2019第十届蓝桥杯大赛软件类省赛C++ B组真题题解 2020第 ...
- 2019 第十届蓝桥杯大赛软件类省赛 C/C++ 大学 A 组 【部分题解】
声明: 这些的答案不是官方答案,都是我自己做的,仅供参考.一起加油 试题 A: 平方和 本题总分:5′5 '5′ [问题描述] 小明对数位中含有 2.0.1.92. 0. 1. 92.0.1.9 的数 ...
- 第十届蓝桥杯大赛软件类省赛C++研究生组
这比赛题目 A 立方和(5,√) B 字串数字(5, √) C 质数(10, √) D 最短路(10, √) E RSA解密(15) F Fibonacci数列与黄金分割(15, √) G 扫地机器人 ...
- 2022年第十三届蓝桥杯大赛软件类决赛C/C++/Java/Python真题
1.2022年第十三届蓝桥杯大赛软件类决赛C/C++大学A组真题 2022年第十三届蓝桥杯大赛软件类决赛C/C++大学A组真题 - 题库 - C语言网 2. 2022年第十三届蓝桥杯大赛软件类决赛C/ ...
- 蓝桥杯软件类比赛java,第十届蓝桥杯大赛软件类省赛
第十届蓝桥杯大赛软件类省赛 这些题官网还没有解答的,我主要参考了b站UP主大雪菜的解法(绝大部分题先自己做了一遍),当然也网上查了一些解答,但发现现在网上的一些解法并不正确,希望可以给大家一个参考. ...
- 第十三届蓝桥杯大赛软件类决赛Java大学B组C题——左移右移
[问题描述] 小蓝有一个长度为 N 的数组,初始时从左到右依次是 1, 2, 3, . . . N. 之后小蓝对这个数组进行了 M 次操作,每次操作可能是以下 2 种之一: 左移 x,即把 x 移动到 ...
- 第十届蓝桥杯大赛软件类省赛
其他组见以下链接. 第十届蓝桥杯所有的题 一.研究生组 试题 A: 立方和 本题总分:5 分 [问题描述] 小明对数位中含有 2.0.1.9 的数字很感兴趣,在 1 到 40 中这样的数包 括 1.2 ...
- 第十届蓝桥杯大赛软件类决赛 Java大学C组
蓝桥杯2019国赛Java大学C组题 试题 A: 奇数倍数 试题 B: 递增序列 试题 C: 平方拆分 试题 D: 切割 试题 E: 序列求和 试题 F: 最长子序列 试题 G: 数正方形 试题 H: ...
- 2、数的分解 - 2019年第十届蓝桥杯大赛软件类省赛
问题 [问题描述] 把 2019 分解成 3 个各不相同的正整数之和,并且要求每个正整数都不包 含数字 2 和 4,一共有多少种不同的分解方法? 注意交换 3 个整数的顺序被视为同一种方法,例如 10 ...
最新文章
- IS-IS 的 DIS (伪节点) 及 DIS 和 OSPF中DR 的区别
- django(七)之数据库表的单表-增删改查QuerySet,双下划线
- 【济宁百瑞达机械设备有限公司——文化拓展学习】2018技术展望:利用现有IT投资扩大云部署...
- JS控制锚点打开新窗口
- python判断能否组成三角形_python三角形判定怎么做
- 敏捷开发般若敏捷系列之二:什么是敏捷(上)(无住,不住于法,破法执)...
- Accelerated C++ 习题答案
- 读取xml并转换为Java对象
- Python数据结构与算法笔记(七):数据结构——队列,链表和哈希表
- 试题17 方程的解(枚举法)
- 数据结构--二叉树与森林记事本
- iOS 8 Xcode6 设置Launch Image 启动图片转
- 英特尔中国研究院院长宋继强:摩尔定律的经济效益仍在继续
- Win32 SDK创建ListView控件
- Unity视频播放之Video Player的简单使用
- win10截图软件工具
- Endnote X9软件关联WPS解决方案
- 测试开发系列之——css
- 【MQ】MQ消息中间件RabbitMQ
- 算法设计与分析 二叉树