蓝桥杯2019c语言b组试题,2020年7月B组C++蓝桥杯真题试水-程序员宅基地

技术标签: 蓝桥杯2019c语言b组试题  

哇!刚刚突然发现我的那篇扩展欧几里得达到了500+的阅读量,开森森~ 看起来努力就是有回报的嘛!用心写的文章和不用心写的文章相信广大程序员萌都一眼看得出来撒~

快乐!你们的关注和点赞是我最大的动力嗷!┗|`O′|┛

1460000038702431

好了,闲话不多说~ 正片开始!

A.跑步训练

1460000038702433

这个题个人不建议写程序,直接手算就好了,但是要注意的是,每一轮-600然后+300,就相当于-300,但是!一定要记得这-300的时间是120s,而不是60s,手算党千万要小心!检查检查再检查,这个分丢得相当不值得。

结果:3880

B.纪念日

1460000038702425

日期题目年年有,一点都不稀奇~关键在于快速A,听说C++算日期很麻烦,谁要咱也不是Java选手呢,害,鱼和熊掌⑧可兼得嘛,祭上大杀器——计算器!

1460000038702432结果:52038720

C.合并检测

1460000038702434

这个题,数学功底相当强 懒得写程序的我,直接手算!

1460000038702435

结果:10

D.REPEAT程序

1460000038702437

先说好啊,这玩意不是按照样例算的,实战的时候人家是给了数据的,是一个txt文件,那玩意长的,保证你放弃硬写出这些个循环的想法。

我重新梳理了一遍带佬的思路,然后附上了详细注释`#include

using namespace std;

const int N = 1e5 + 10;

char str[N];

int a[N], b[N];//a用来存放当前行层的缩进格数,b用来存放当前层的循环次数

int main(int argc, char const *argv[])

{

int pos = 0, p = 0, w = 1, ans = 0;//pos存第几层循环,p存每行前面的空格数,w是总的循环数,ans存结果

a[0] = -1, b[0] = 1;

freopen("prog.txt","r",stdin);//就是将标准输入流重定向到这个txt文件中,

//从文件中获取输入

gets(str);//首行的“A=0”不需要

while(gets(str)){

int len = strlen(str);

p = 0;//每次p都要归零啊

while(str[p] == ' ') p++;

while(p <= a[pos]) w /= b[pos--];//说明退出了最近的那一层

if(str[len - 1] == ':'){//是REPEAT语句

int k = str[len - 2] - '0';//当前循环重复的次数

w *= k;

pos ++;//来到新的一层

a[pos] = p, b[pos] = k;

}else {//不是循环语句

int k = str[len - 1] - '0';//要加上的数

ans += w * k;

}

}

cout<

return 0;

}`

* 1

* 2

* 3

* 4

* 5

* 6

* 7

* 8

* 9

* 10

* 11

* 12

* 13

* 14

* 15

* 16

* 17

* 18

* 19

* 20

* 21

* 22

* 23

* 24

* 25

* 26

* 27

* 28

* 29

* 30

* 31

结果:241830

E.矩阵

1460000038702427

这题很容易让人想起我们之前做过的那一道DP+打表的题目,有人说DP本质就是打表,我觉得可以这么说,起码以目前我不太高深的实力,可以这么理解。

首先我们自己列出小数据表格,然后根据列出的表格找规律并且写代码。

1460000038702428

这样的填表莫名让我想起了小学课本上的那个找国王要米的人,在棋盘上堆米直到堆成山。。

其实自己在草稿纸上画一画很容易发现规律——也就是我们要的递推式。

代码就很好写了~~`#include

using namespace std;

const int N = 2025;

int dp[N][N];

int main(int argc, char const *argv[])

{

dp[1][1] = 1;//1必然在首格

for (int i = 2; i <= 2020; ++i)

{

for (int j = 1; j <= i; ++j)//在第一行放j个

{

dp[i][j] += dp[i - 1][j - 1];

if(2 * j >= i) dp[i][j] += dp[i - 1][j];//如果第一行的数目>=第二行,那么就还可以加上上方那个

dp[i][j] %= 2020;//可能数很大

}

}

printf("%dn", dp[2020][1010]);//注意是第1010列

return 0;

}`

* 1

* 2

* 3

* 4

* 5

* 6

* 7

* 8

* 9

* 10

* 11

* 12

* 13

* 14

* 15

* 16

* 17

* 18

* 19

* 20

* 21

F.整除序列

1460000038702426

苦等了这么久终于来了一道签到题!/(ㄒoㄒ)/~~

蓝桥是不是变了呜呜呜`#include

using namespace std;

typedef long long ll;

ll n;

int main(int argc, char const *argv[])

{

scanf("%ld", &n);

while(n >= 1){

printf("%ld", n);

if(n != 1) printf(" ");

else printf("n");

n = (int) n >> 1;

}

return 0;

}`

* 1

* 2

* 3

* 4

* 5

* 6

* 7

* 8

* 9

* 10

* 11

* 12

* 13

* 14

* 15

* 16

* 17

G.解码

1460000038702429

签到×2!果然不会让咱们太难看哈~

我呵呵呵我又不审题!我把字母l看成了1,哭晕。。我难看了,对八七!我反省!我以后一定好好审题!`// #include

// using namespace std;

// const int MAXN = 110;

// char str[MAXN];

// int main(int argc, char const *argv[])

// {

// scanf("%s",str);

// int len = strlen(str);

// for (int i = 0; i < len; )

// {

// char ch;

// int num = 0, digit = 0;

// if((str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z')){

// ch = str[i];

// }

// while(str[++i] >= '0' && str[i] <= '9'){

// digit += str[i] - '0';

// num += digit;

// digit *= 10;

// }

// for (int j = 0; j < num; ++j) putchar(ch);

// }

// printf("n");

// return 0;

// }

#include

using namespace std;

const int MAXN = 110;

char s[MAXN];

int main() {

scanf("%s", s);

for (int i = 0; s[i]; i++) {

if (s[i] >= 'a' && s[i] <= 'z') {

putchar(s[i]);

} else if (s[i] >= 'A' && s[i] <= 'Z') {

putchar(s[i]);

} else {

int k = s[i] - '0' - 1;

while (k--) putchar(s[i - 1]);

}

}

puts("");

return 0;

}`

* 1

* 2

* 3

* 4

* 5

* 6

* 7

* 8

* 9

* 10

* 11

* 12

* 13

* 14

* 15

* 16

* 17

* 18

* 19

* 20

* 21

* 22

* 23

* 24

* 25

* 26

* 27

* 28

* 29

* 30

* 31

* 32

* 33

* 34

* 35

* 36

* 37

* 38

* 39

* 40

* 41

* 42

* 43

* 44

* 45

* 46

H.走方格

1460000038702430

虽然兴奋,切记还是不能大意~`#include

using namespace std;

const int N = 35;

int dp[N][N];

int main(int argc, char const *argv[])

{

int n, m;

scanf("%d%d", &n, &m);

for (int i = 1; i <= n; ++i)

{

for (int j = 1; j <= m; ++j)

{

if(i == 1 && j == 1){ //只需要一个1

dp[i][j] = 1;

continue;

}

if(i & 1 || j & 1) //只要有一个不是2的倍数

dp[i][j] = dp[i - 1][j] + dp[i][j - 1];

}

}

printf("%dn", dp[n][m]);

return 0;

}`

* 1

* 2

* 3

* 4

* 5

* 6

* 7

* 8

* 9

* 10

* 11

* 12

* 13

* 14

* 15

* 16

* 17

* 18

* 19

* 20

* 21

* 22

* 23

* 24

* 25

I.整数拼接

1460000038702436

这题,确实没思路,要是暴力肯定炸,于是瞪着带佬没有注释的代码看了一个小时,终于。。懂了,现在给亲爱的读者朋友们奉上注释~`#include

using namespace std;

typedef long long ll;

const int N = 1e5 + 10;

int cnt[10][N];

int a[N];

int ans;

int get_length(int x){ //得到一个整数的长度(利用传形参不变实际值)

int length = 0;

while(x){

x /= 10;

length++;

}

return length;

}

int main(int argc, char const *argv[])

{

int n, m;

scanf("%d%d", &n, &m);

int ans = 0;

for (int i = 1; i <= n; ++i) scanf("%d", &a[i]);

for (int i = 1; i <= n; ++i)

{

int len = get_length(a[i]);

int left = (m - a[i] % m) % m; //这个left和a[i]%m是关于m互余的

ans += cnt[len][left];//看看前面有没有契合的拼接对象

int p = 10;//十位起步

for (int j = 1; j <= 9; ++j)

{

cnt[j][1ll * p * a[i] % m] ++;//这个数的另一半是j位,这个数就是(j+1)位,不然无法拼接

p *= 10;

}

}

memset(cnt, 0, sizeof(cnt));//记得清空

for (int i = n; i >= 1; --i)//反着跑一遍

{

int len = get_length(a[i]);

int left = (m - a[i] % m) % m;

ans += cnt[len][left];//看看后面有没有契合的拼接对象

int p = 10;//十位起步

for (int j = 1; j <= 9; ++j)

{

cnt[j][1ll * p * a[i] % m] ++;//这个数的另一半是j位,这个数就是(j+1)位,不然无法拼接

p *= 10;

}

}

printf("%dn", ans);

return 0;

}`

* 1

* 2

* 3

* 4

* 5

* 6

* 7

* 8

* 9

* 10

* 11

* 12

* 13

* 14

* 15

* 16

* 17

* 18

* 19

* 20

* 21

* 22

* 23

* 24

* 25

* 26

* 27

* 28

* 29

* 30

* 31

* 32

* 33

* 34

* 35

* 36

* 37

* 38

* 39

* 40

* 41

* 42

* 43

* 44

* 45

* 46

* 47

* 48

* 49

* 50

* 51

* 52

为什么(m-x%m)和x%m是契合的呢?

我们来研究一个案例就清楚了——

45为什么可以整除3?

因为40%3=1(这一部分余三多一),而3-5%3也=1(这一部分余三少一),刚刚好,一拍即合!加起来就可以整除3。这也就是ans += cntlen的理由。

J.网络分析

最后一题拖了三天了QWQ,效率太低了(废物哇的一声哭出来)

1460000038702439

1460000038702438

这题,不是裸的并查集,注意标黄部分。

每次新的结点加入之后,之前集合中的点加上的值是不能算在新人头上的,洗澡的时候想到了,每次新人加入的时候,就问问自己的父亲现在手上有多少值,然后自己的结点就要减去前人积累(也就是加入的时候父亲的值)的值,最后在输出的时候检查是否是根结点,如果不是就要加上父亲的值,等于新人加入之后的值之和。

本来想的是每个点都标记前人的值,后来借鉴了带佬的思路,每次在merge的时候减去根结点的值,然后再在最后加回来,就是加入之后的值,还是觉得这样比较简单。#include

using namespace std;

typedef long long ll;

const int N = 1e4 + 10;

int father[N];

ll ans[N];

void init(int x){

for (int i = 1; i <= x; ++i)

father[i] = i;

}

int find(int x){

int a = x;

while(x != father[x]) x = father[x];//x抵达根节点

while(a != father[a]){//路径压缩

father[a] = x;

a = father[a];

}

return x;

}

void merge(int x, int y){

x = find(x), y = find(y);

if(x != y) {

father[x] = y; //x的粑粑是y

ans[x] -= ans[y]; //之前的别人的就要减掉,只算加入之后的【关键一步】

}

}

int main(int argc, char const *argv[])

{

int n, m, flag;

scanf("%d%d", &n, &m);

init(n);

while(m--){

scanf("%d", &flag);

if(flag == 1){

int a, b; scanf("%d%d",&a, &b);

merge(a, b);

}else {

int p, t; scanf("%d%d",&p, &t);

int fa = find(p);

ans[fa] += t;

}

}

for (int i = 1; i <= n; ++i)

{

ll res = ans[i];

int fa = find(i);

if(i != fa) res += ans[fa];

printf("%lld%c", res, " n"[i == n]);//最后输出换行的方法,学习!

}

return 0;

}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_36335903/article/details/117111878

智能推荐

分包组包 北斗通信_一种基于北斗的低功耗双向非实时通信方法-程序员宅基地

文章浏览阅读474次。一种基于北斗的低功耗双向非实时通信方法【技术领域】[0001]本发明涉及一种基于北斗的低功耗双向非实时通信方法,属于北斗系统通信技术领域。【背景技术】[0002]北斗卫星系统具备的短报文通信功能在水文、气象、海洋、林业领域的遥测系统已经广泛应用。但鉴于目前北斗通讯终端的功耗较大,发信频度受限的问题,这些遥测系统在应用北斗卫星作为数据传输载体时,一般只实现了野外遥测站向数据采集中心站的单向传输功能,..._北斗双向通信

windows域名映射_windows域名映射文件-程序员宅基地

文章浏览阅读981次,点赞2次,收藏2次。windows域名映射_windows域名映射文件

C++程序打包_c++打包-程序员宅基地

文章浏览阅读1.9k次。首先我用的vs2017对现有的项目进行打包处理,当然首先的有打包的工具就是下图的这个vs小工具,找不到的话可以在工具中打开扩展与更新,在里面查找相应的工具名之后就是在项目上新建一个setup项目,前提是你已经安装了上面的那个小工具,之后就是对项目进行添加要输出的项目,设为主输出,然后再第二个文件上进行存放该项目的快捷方式,这个是在桌面的上的,而第三个文件夹是在开始菜单栏里添加的在其中加入所需要的依赖以及项目再进行生成就会出现项目的安装的exe文件在你生成的项目下..._c++打包

输入打开文件-程序员宅基地

文章浏览阅读86次。import fnmatch, osimport reyy = input('')def edd(user_name): def allFiles(root, patterns = '*', single_level = False, yield_folders = False): patterns = patterns.split(';') ..._输打开

Eplan教学视频合集-百度网盘-收集于网络_eplan教程 百度网盘-程序员宅基地

文章浏览阅读9.4k次,点赞5次,收藏18次。Eplan教学视频合集-百度网盘-收集于网络https://yun.baidu.com/s/1djYbk#list/path=%2Fhttps://pan.baidu.com/s/14DHLr31mLq2N8qbxd7vcbw //code:cva8https://yun.baidu.com/s/1qYfdJLM#list/path=%2Fhttps://yun.baidu.co..._eplan教程 百度网盘

keep-alive vue不起作用的原因_vue3+vite的keep-alive浏览器返回不生效-程序员宅基地

文章浏览阅读2w次。keep-alive 从列表页进入到详情页,再回到列表页,然后页面又重新请求,而不是直接读缓存里面的(ps:之前keep-alive用在项目中是可以起作用的,但是不知道为什么这两天就出现了这样的问题。就连activated,deactivated这两个钩子函数也是没有触发到) 具体代码如下 我尝试在项目中新建一个很简单的页面,也是没有效果。一开始以为是vue的版本过低导致的,看了一下v..._vue3+vite的keep-alive浏览器返回不生效

随便推点

elasticsearch-setup-passwords interactive_bash: elasticsearch-setup-passwords: command not f-程序员宅基地

文章浏览阅读2.6k次。elasticsearch-setup-passwords interactive[root@node-zwf ~]# su elasticsearch[elasticsearch@node-zwf root]$ cd /home/elasticsearch/elasticsearch-7.8.0/[elasticsearch@node-zwf elasticsearch-7.8.0]$ elasticsearch-setup-passwords interactiveba..._bash: elasticsearch-setup-passwords: command not found

学校公共计算机保用规定,湖南中医药大学涉密计算机和涉密移动存储介质保密管理规定...-程序员宅基地

文章浏览阅读922次。第一条为了进一步加强学校涉密计算机和涉密移动存储介质(移动硬盘、U盘、软盘、光盘、存储卡等)的安全保密工作,维护国家安全和利益,维护学校稳定和发展,结合我校工作实际,特制定本规定。第二条学校保密委员会负责全校涉密计算机、移动存储介质保密管理的指导、协调和监督工作。保密技术防范和管理工作由学校网络中心负责。第三条涉密计算机的日常管理制度(一)涉密计算机不得直接或间接接入国际互联网、校园网和其他公共信..._大学 涉密计算机安全保密策略

Vue.js复习_下列代码中,应用v-for指令遍历数组items-程序员宅基地

文章浏览阅读380次。Vue 实例有⼀个完整的⽣命周期,也就是从开始创建、初始化数据、编译模版、挂载Dom -> 渲染、更新 -> 渲染、卸载等⼀系列过程,称这是Vue的⽣命周期。_下列代码中,应用v-for指令遍历数组items

删除安装Google Chrome浏览器时捆绑安装的Google 文档、表格、幻灯片、Gmail、Google 云端硬盘、YouTube网址链接(Mac)_chrome自带的表格怎么删-程序员宅基地

文章浏览阅读5.2k次,点赞3次,收藏2次。Mac mini操作系统,安装完 Google Chrome 浏览器以后,单击 启动台 桌面左下角的“显示应用程序”,我们发现捆绑安装了。进入目录 /Users/用户名/Applications/Chrome 应用。那如何删除这些网址连接呢?,一个个单击打开,发现都是网址链接。已删除,干干净净,启动台回来了。进入或者删除整个文件夹。_chrome自带的表格怎么删

基于Java+SpringBoot+vue+elementui图书商城系统设计实现_图书商城后台管理系统设计与实现-程序员宅基地

文章浏览阅读3.9w次,点赞153次,收藏430次。主要功能包括管理员:首页、个人中心、图书分类管理、回收类别管理、新书榜管理、特价区管理、旧书回收管理、用户管理、订单评价管理、回收预约管理、图书回收管理、管理员管理、系统管理、订单管理。前台使用:首页、新书榜、特价区、旧书回收、公告资讯、个人中心、后台管理、购物车、客服。用户:首页、个人中心、订单评价管理、回收预约管理、图书回收管理、我的收藏管理、订单管理等功能。_图书商城后台管理系统设计与实现

【JZ2440笔记】裸机实验使用SDRAM_京累里101123-程序员宅基地

文章浏览阅读393次。S3C2440A 存储器控制器为访问外部存储的需要器提供了存储器控制信号。S3C2440A 包含以下特性:–大/小端(通过软件选择)–地址空间:每个 Bank 有 128M 字节(总共 1G/8 个 Bank)–大/小端(通过软件选择)–除了 BANK0(16/32 位)之外,其它全部 BANK 都可编程访问宽度(8/16/32 位)–总共 8 个存储器 Bank6 个存储器 Bank 为 ROM,SRAM 等其余 2 个存储器 Bank 为 ROM,SRAM,SDRAM 等–7 个固定的_京累里101123