蓝桥杯|2021第十二届蓝桥杯大赛软件赛省赛C++ C组真题题解

==============================
2019-2021蓝桥杯C++ C组真题题解:
2019第十届蓝桥杯大赛软件类省赛C++ C组真题题解
2020第十一届蓝桥杯大赛软件类省赛第二场C++ C组真题题解
2021第十二届蓝桥杯大赛软件赛省赛C++ C组真题题解
==============================

目录

  • 试题A:ASC(5分)
  • 试题B:空间(5分)
  • 试题C:卡片(10分)
  • 试题D:相乘(10分)
  • 试题E:路径(15分)
  • 试题F:时间显示(15分)
  • 试题G:最少砝码(20分)
  • 试题H:杨辉三角形(20分)
  • 试题I:左孩子右孩子(25分)
  • 试题J:括号序列(25分)

试题A:ASC(5分) 蓝桥杯|2021第十二届蓝桥杯大赛软件赛省赛C++ C组真题题解
文章图片

题目分析:
将’L’字符直接赋值给int就可以输出数字了
题目代码:
#include using namespace std; int main() { int c='L'; cout<

题目答案:
76

试题B:空间(5分) 蓝桥杯|2021第十二届蓝桥杯大赛软件赛省赛C++ C组真题题解
文章图片

题目分析:
1MB=1024*1024B,1B=8位
题目代码:
#include using namespace std; int main() { cout<<256*1024*1024/4<

题目答案:
67108864

试题C:卡片(10分) 蓝桥杯|2021第十二届蓝桥杯大赛软件赛省赛C++ C组真题题解
文章图片

题目分析:
因为从1开始,所以1是用到最多的卡片,我们可以从1枚举,直到有2021个1
题目代码:
#include using namespace std; int tot_1=2021; void cal(int i) { while(i>0){ if(i%10==1)tot_1--; i=i/10; } } int main() { int i=1; while(1){ cal(i); if(tot_1<=0)break; i++; } cout<<"tot_1:"<

题目答案:
3181

试题D:相乘(10分) 蓝桥杯|2021第十二届蓝桥杯大赛软件赛省赛C++ C组真题题解
文章图片

题目分析:
枚举即可
题目代码:
#include using namespace std; #define NUM 1000000007 #define RES 999999999 int main() { for(long long i=1; i<=NUM; i++) { if((i*2021)%NUM==RES)cout<

题目答案:
17812964

试题E:路径(15分) 蓝桥杯|2021第十二届蓝桥杯大赛软件赛省赛C++ C组真题题解
文章图片

题目分析:
方法一:比较简单,相当于枚举的方法
从1到2021进行寻找每个的最短的路径,我想的是多循环几次看结果的变化,但是没想到第一次就是正确的结果
注:n*i/__gcd(n,i) 是求最小公倍数
细节参考:C++ 一行代码解决最大公约数和最小公倍数
题目代码:
#include using namespace std; int num[2022]; void fun(int n)//寻找一个位置的最短路径(更新) { int left=n-21,right=n+21; if(n-21<=0) { left=1; }else if(n+21>2021) { right=2021; } for(int i=left; i<=right; i++) { num[n]=min(n*i/__gcd(n,i)+num[i],num[n]); } } int main() { for(int i=1; i<=2021; i++)num[i]=100000000; //进行初始化 num[1]=0; for(int j=1; j<10; j++)//循环10次看结果 { for(int i=1; i<=2021; i++) { fun(i); } cout<

【蓝桥杯|2021第十二届蓝桥杯大赛软件赛省赛C++ C组真题题解】题目答案:
10266837

试题F:时间显示(15分) 蓝桥杯|2021第十二届蓝桥杯大赛软件赛省赛C++ C组真题题解
文章图片

蓝桥杯|2021第十二届蓝桥杯大赛软件赛省赛C++ C组真题题解
文章图片

题目分析:
只要记清时间的换算单位即可
题目代码:
#include using namespace std; #define Day 86400000 int main() { long int time; cin>>time; time=time%Day; int Hour,minute,second; Hour=time/(60*60*1000); time=time%(60*60*1000); minute=time/(60*1000); time=time%(60*1000); second=time/1000; printf("%02d:%02d:%02d",Hour,minute,second); return 0; }

试题G:最少砝码(20分) 蓝桥杯|2021第十二届蓝桥杯大赛软件赛省赛C++ C组真题题解
文章图片

蓝桥杯|2021第十二届蓝桥杯大赛软件赛省赛C++ C组真题题解
文章图片

题目分析:
题目代码:
题目答案:
试题H:杨辉三角形(20分) 蓝桥杯|2021第十二届蓝桥杯大赛软件赛省赛C++ C组真题题解
文章图片

蓝桥杯|2021第十二届蓝桥杯大赛软件赛省赛C++ C组真题题解
文章图片

题目分析:
题目代码:
题目答案:
试题I:左孩子右孩子(25分) 蓝桥杯|2021第十二届蓝桥杯大赛软件赛省赛C++ C组真题题解
文章图片

蓝桥杯|2021第十二届蓝桥杯大赛软件赛省赛C++ C组真题题解
文章图片

蓝桥杯|2021第十二届蓝桥杯大赛软件赛省赛C++ C组真题题解
文章图片

题目分析:
题目代码:
题目答案:
试题J:括号序列(25分) 蓝桥杯|2021第十二届蓝桥杯大赛软件赛省赛C++ C组真题题解
文章图片

题目分析:
题目代码:
题目答案:

    推荐阅读