2020年第十一届C/C++ B组第一场蓝桥杯省赛真题

准备参加第十四届蓝桥杯,今天开始刷题目的第一天,下面是2020年第十一届C/C++ B组第一场蓝桥杯省赛真题,以下是我的做题目心得。

跑步训练

第一次写的代码失误点如下:第一个错误点是因为好久没有写代码,忘记判断对才能循环,算是失误。第二个点如果在现实中是对的,但是在代码里面会因为格式转换导致power/600变成0.这需要注意一下。

代码如下:

int main() {
    int power = 10000;
    int expend = -600;
    int recover = 300;
    int min = 0;
    while (power > 600) {
        power += expend;
        min++; 
        if (power == 0) {
            break;
        }
        power += recover;
        min++;
    }
    if (power == 0) {
        cout<<min*60;
    }else {
        cout<<min*60+power/10;
    }
    return 0;
} 

纪念日

本题目我是从1921年开始计算的,而且我把算闰年的部分分开了。

计算闰年的判断如下:普通闰年:公历年份是4的倍数且不是100的倍数为普通闰年(如2004、2020年就是闰年)。

世纪闰年:公历年份是整百数的,必须是400的倍数才是世界闰年(如2000是世纪闰年,1900不是世纪闰年)。

因为是填空题,我写的代码并不是很好看,只是用于计算。

最后代码如下:

#include<iostream>
using namespace std;
int main(){
    int year = 2020 - 1921;//年数 
    int m = (2020 - 1924) / 4 + 1;//闰年数 
    int day = year * 365 + m -22; //天数 
    cout<<day*24*60; 
}

合并检测

本题目没有告诉我们A国的人数,这一开始就有点没有头绪,然后我们可以从感染率为1入手,毕竟代表人的数字不能是小数,那我就设A国总人数为100,这样简单也方便。那感染的人就只有一个。设试管的使用量为sum,可以得下面的试子:

A国人数可被k整除:sum=100/k+k

A国人数不能被k整除:sum=100/k+k+1

最后代码如下:

#include<iostream>
using namespace std;

int main()
{
    int k = 0;
    int sum = 0x3f3f3f;//试管数量 
    for(int i = 1; i <= 100; i++){
        if(100%i==0)
        {
            if(100/i+i<sum){
                sum=100/i+i;
                k = i;
            }
        }
        else
        {
            if(100/i+1+i<sum) 
            {
                    sum=100/i+1+i;
                    k=i;
            }
        }
    }
    cout << k <<endl;
    return 0;
} 

REPEAT程序

我们可以看看题目的对应方式,可以发现有点像for循环,其中REPEAT后面的数字就代表要循环的次数而且A=A+5循环了60次,说明它是最里面的命令行。

代码如下:

#include<iostream>
using namespace std;
int main() {
    int A = 0;
    for (int i = 0;i < 2;i ++) {
        A += 4;
        for (int j = 0;j < 5;j ++) {
            for (int k = 0;k < 6;k ++) {
                A += 5;
            }
            A += 7;
        }
        A += 8;
    } 
    A += 9;
    cout << A <<endl;
    return 0; 
}

矩阵

这个题目需要使用动态规划的知识,其中动态规划的知识可以分三步走:

第一步,定义一个数组元素的定义,我定义一个dp[i][j]的数组,i代表放在第一行的数字量,j代表第二行的数字量。

因为是2×1010的矩阵,所以每一行的最大数字量为1010.

第二步,找出数组元素之间的关系式:

将当前数放在第一行:dp[i][j] += dp[i - 1][j],将当前数放在第二行:dp[i][j] += dp[i][j - 1]

第三步,得找到一个初始值.比如在矩阵里面不放数字,也是一种方案,故dp[0][0]=1

最后代码如下:

#include<iostream>
using namespace std;
int dp[1011][1011];
int main() {
    dp[0][0]=1;
    for(int i = 0;i <= 1010;i ++) {
        for(int j = 0;j <= 1010;j ++) {
            if(i-1 >= j) {
                dp[i][j] += dp[i-1][j] % 2020;
            }
            if(j) {
                dp[i][j] += dp[i][j-1] % 2020; 
            }
        }
    } 
    cout<< dp[1010][1010] <<endl;
    return 0;
}

整除序列

这个题目使用while语句即可完成,而且最好不用存在数组里面,直接得答案后就输出

代码如下:

#include<iostream>
using namespace std;
int main() {
    int num; 
    cin>>num;
    cout<<num << " ";
    while(num > 1) {
        num =num/2;
        cout<<num << " ";
    }
    return 0;
}

解码

这个题目只要会使用string库就可以解出来了

代码如下:

#include<iostream>
#include<string> 
using namespace std;
int main () {
    string st;
    cin>>st;
    for(int i = 0;i < st.length();i ++) {
        if (st[i] > 48 && st[i] < 58) {
            for(int j = 1;j < st[i]-48;j ++) {
                cout<<st[i-1]; 
            } 
        }else {
            cout<<st[i];
        } 
    } 
    return 0;
}

走方格

这个还是使用的是动态规划,加一个小的限制就是m和n不能同时为偶数,但是这个并不重要,我们直接分析,三步走。

第一步,定义一个数组。dp[i][j],带表它走到的位置需要花费的方案。

第二步,找出数组元素之间的关系式:dp[i][j]=dp[i-1][j]+dp[i][j-1]

第三步,找出初始值。因为它只能向右或者向下,这样的话可以初始以下两方面:

dp[0] [0….n-1] = 1; // 相当于最上面一行,只能一直往左走

dp[0…m-1] [0] = 1; // 相当于最左面一列,只能一直往下走

代码如下:

#include<iostream>
using namespace std;
int dp[31][31];
int count(int m,int n);
int main(){
    int m,n;
    cin>>m>>n;
    if(!(m % 2 |n % 2)) {
        cout<<0;
    }else {
        cout<<count(m,n);
    }
    return 0;
} 
int count(int m,int n) {
    for(int i = 1;i <= n;i ++) {
        dp[i][1] = 1;
    }
    for(int j = 1;j <= m;j ++) {
        dp[1][j] = 1;
    }
    for(int i = 2;i <= n;i ++) {
        for(int j = 2;j <= m;j ++) {
            if(!(i % 2 |j % 2)) {
                continue;
            }
            dp[i][j] = dp[i-1][j] + dp [i][j-1]; 
        }
    }
    return dp[n][m];
}

整数拼接

一开始想的是把数字变成字符串,后面拼接后再改成数字,但是这样太麻烦,我也不会,那我们可以求它的位数,用次方的方式来使他变成拼接的前半部分。思路清晰后代码如下:

#include<iostream>
#include<cmath>
using namespace std;
int figure(int num); //求位数 
int main() {
    int n,k;
    int count = 0;
    int num;
    cin>>n>>k;
    int a[n];
    for(int i = 0;i < n;i ++) {
        cin>>a[i];
    }
    for(int i = 0;i < n;i ++) {
        for(int j = 0;j < n;j ++) {
            if(i == j) {
                continue;
            }
            num = a[i]*pow(10,figure(a[j]))+a[j];//这样可以直接加在后面 
            if(num % k == 0) {
                count++;
            }
        }
    }
    cout<<count;
    return 0;
}
int figure(int num) {
    int n = 0;
    int m = 1;
    while(m) {
        m = num;
        m /= 10;
        n++;
    }
    return n;
}

网络分析

我看见这个题目需要使用的知识点是图的知识点,由于可以相互通讯,那就是无向连接,由于它是需要遍历的,那我们可以思考一下DFS与BFS算法相关知识。我使用邻接矩阵来存储。

代码如下:

#include<iostream>
#include<queue>
using namespace std;
int main() {
    int n,m,top;
    cin>>n>>m;
    queue<int> myqueue;
    int a[n][n];//邻接矩阵 
    int b[n][n];
        for (int i = 0;i < n;i ++) {
        for (int j = 0;j < n;j ++) {
              a[i][j] = 0; 
        } 
    }
        for (int i = 0;i < n;i ++) {
        for (int j = 0;j < n;j ++) {
              b[i][j] = 0; 
        } 
    }
    int m1,m2,m3;//判断的数字 
    for (int i = 0;i < m;i ++) {
        cin>>m1>>m2>>m3;
        if (m1 == 1) {
                a[m3-1][m2-1] = 1;
                a[m2-1][m3-1] = 1;
        }
        
        if (m1 == 2) {
            myqueue.push(m2);
            while(myqueue.size()) {
                top = myqueue.front();
                a[top-1][top-1] += m3;
                myqueue.pop(); 
                for(int j = 0;j < n;j ++) {
                    if(a[top-1][j] == 1) {
                        if(b[top-1][j] == 1) {
                            continue;
                        }
                        b[top-1][j] = 1;
                        b[j][top-1] = 1;
                        myqueue.push(j+1);
                    }
                }
            }
        for (int i = 0;i < n;i ++) {
        for (int j = 0;j < n;j ++) {
              b[i][j] = 0; 
        } 
    }
        }
    }
    for (int i = 0;i < n;i ++) {
        for (int j = 0;j < n;j ++) {
            cout<<a[i][j]<<" "; 
        } 
        cout<<endl;
    }
    return 0; 
}

第十题的代码是错误的,我还在改正,后面对了,我会重新修改发布。希望有小伙伴可以与我探讨一下思路,大家一起分享,一起进步!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/3895.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【SCL】博图——先入先出排序法

使用博图SCL语言来实现先入先出排序 前言 使用SCL完成一个先入先出排序 具体要求&#xff1a;最先输入的一个数值&#xff0c;最先输出出来&#xff0c;下面的数自动向前填充&#xff1b; 注&#xff1a;这里可能有两种理解&#xff1a;一是第一个输入的第一个出来&#xff…

解析vue中的process.env

一、介绍 1、process process是 nodejs 下的一个全局变量&#xff0c;它存储着 nodejs 中进程有关的信息。 2、process.env env 是 environment 的简称&#xff0c;process.env属性返回一个包含用户环境的对象。 3、dotenv Dotenv 是一个零依赖的模块&#xff0c;它能将环境变…

蓝桥杯刷题冲刺 | 倒计时16天

作者&#xff1a;指针不指南吗 专栏&#xff1a;蓝桥杯倒计时冲刺 &#x1f43e;马上就要蓝桥杯了&#xff0c;最后的这几天尤为重要&#xff0c;不可懈怠哦&#x1f43e; 文章目录1.青蛙跳杯子1.青蛙跳杯子 题目 链接&#xff1a; 青蛙跳杯子 - 蓝桥云课 (lanqiao.cn) X 星球的…

用于人工智能研究的开源Python微电网模拟器pymgrid(入门篇)

pymgrid是一个开源Python库&#xff0c;用于模拟微型电网的三级控制&#xff0c;允许用户创建或自行选择的微电网。并可以使用自定义的算法或pymgrid中包含的控制算法之一来控制这些微电网&#xff08;基于规则的控制和模型预测控制&#xff09;。 pymgrid还提供了与OpenAI Gy…

初识冯诺依曼体系结构

目录 1.冯诺依曼体系结构 2.冯诺依曼体系的原理 3.数据流向 4.冯诺依曼体系的意义 1.冯诺依曼体系结构 我们常见的计算机&#xff0c;如笔记本。我们不常见的计算机&#xff0c;如服务器&#xff0c;大部分都遵守冯诺依曼体系。 &#xff08;1&#xff09;输入单元&#xff1a;…

JavaEE-多线程中wait和notify都有哪些区别?

更多内容请点击了解 本篇文章将详细讲述wait和notify的区别&#xff0c;请往下看 目录 更多内容请点击了解 文章目录 一、wait和notify概念 二、wait()方法详解 三、notify()方法详解 代码如下&#xff1a; 3.1notifyAll()详解 四、wait和sleep的对比 一、wait和notif…

Docker容器高级篇

文章目录一、Dockerfile文件1.dockerfile基础知识2.docker执行dockerfile的大致流程3.dockerfile常用保留字4.dockerfile构建镜像示例二、docker network1.docker net常用指令2.docker的网络模式三、docker-compose容器编排1.下载安装2.三个步骤3.compose常用命令4.不使用docke…

Java Web 实战 17 - 计算机网络之传输层协议(2)

大家好 , 这篇文章继续给大家讲解 TCP 协议当中的一些操作 , 比如 : 滑动窗口、流量控制、拥塞控制、延时应答、捎带应答、面向字节流这几个提升 TCP 效率的操作 . 我们还会给大家分析 TCP 连接出现异常的时候 , 该如何处理 . 最后会将 TCP 和 UDP 进行比较 上一篇文章的链接也…

【计组】RAM的深入理解

一、存储机理 RAM的实现逻辑有种&#xff0c;分别是触发器和电容。 SRAM&#xff08;Static&#xff09;DRAM&#xff08;Dynamic&#xff09;存储方式触发器电容破坏性读出否&#xff08;触发器具有稳态&#xff0c;能够锁住0或1两种状态&#xff09;是&#xff08;电容需要…

面试热点题:回溯算法 递增子序列与全排列 II

前言&#xff1a; 如果你一点也不了解什么叫做回溯算法&#xff0c;那么推荐你看看这一篇回溯入门&#xff0c;让你快速了解回溯算法的基本原理及框架 递增子序列 给你一个整数数组 nums &#xff0c;找出并返回所有该数组中不同的递增子序列&#xff0c;递增子序列中 至少有两…

K8S + GitLab + Jenkins自动化发布项目实践(二)

K8S GitLab Jenkins自动化发布项目实践&#xff08;二&#xff09;Jenkins容器化部署部署NFS PV存储Jenkins部署Jenkins初始化安装Jenkins插件Jenkins主从架构配置Kubernetes插件配置安装nerdctl工具自定义Jenkins Slave镜像测试主从架构是否正常前置工作&#xff1a;已部署5…

Linux中滴计划任务

计划任务计划任务计划任务分类at命令load averagecrontab命令配置文件通常包含三个部分cron服务配置文件cron服务的日志文件时间数值的特殊表示方法应用实例案例anacron服务计划任务 计划任务&#xff08;Cron Job&#xff09;是指在预定的时间自动执行一些指定的任务或脚本。…

【蓝桥杯专题】 树状数组(C++ | 洛谷 | acwing | 蓝桥)

菜狗现在才开始备战蓝桥杯QAQ 文章目录【蓝桥杯专题】 &#xff08;C | 洛谷 | acwing | 蓝桥&#xff09;什么是线段数组??1264. 动态求连续区间和数星星线段树AcWing 1270. 数列区间最大值PPPPPPP【蓝桥杯专题】 &#xff08;C | 洛谷 | acwing | 蓝桥&#xff09; 什么是…

华为OD机试用java实现 -【最多获得的短信条数】(2023-Q1 新题)

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:最多获得的短信条数 题目 某…

linxu学习之进程

文章目录进程程序和进程产生进程销毁进程多进程高并发设计孤儿僵尸守护进程孤儿进程&#xff1a;守护进程(重点)僵尸进程&#xff1a;进程 程序和进程 操作系统可以运行多个程序&#xff0c;那他是如何运行的&#xff1f;实际上&#xff0c;CPU的执行是很快的&#xff0c;而待…

【FreeRTOS(一)】FreeRTOS新手入门——初识FreeRTOS

初识FreeRTOS一、实时操作系统概述1、概念2、RTOS的必要性3、RTOS与裸机的区别4、FreeRTOS的特点二、FreeRTOS的架构三、FreeRTOS的代码架构一、实时操作系统概述 1、概念 RTOS&#xff1a;根据各个任务的要求&#xff0c;进行资源&#xff08;包括存储器、外设等&#xff09…

【TypeScript入门】TypeScript入门篇——枚举(enum)

TypeScript是一种静态类型、可选的编程语言&#xff0c;它在JavaScript的基础上添加了类型检查、接口、枚举等新特性&#xff0c;可以让开发更加高效、代码更加健壮。在TypeScript中&#xff0c;枚举是一种特殊的数据类型&#xff0c;它可以用来定义一组命名的常量&#xff0c;…

网络通信之应用层协议--Linux

文章目录关于应用层协议的理解应用层协议的制定理论部分代码部分完整代码以及测试HTTP协议代码测试HTTP协议HTTPS协议加密原因基础的加密方式数据摘要&#xff08;数据指纹&#xff09;数字签名HTTPS的加密方式的选择总结关于应用层协议的理解 在之前的一篇关于套接字实现网络…

天梯赛刷题小记 —— L2

最近在重刷 天梯赛&#xff0c;浅浅记录一下&#xff0c;进入L2阶段了 L2-001 紧急救援 解题思路&#xff1a;典型的dijkstra模板题&#xff0c;带路径记录与权重&#xff0c;方案数记录&#xff0c;解析出过 Dijkstra(兼路径) #include <bits/stdc.h> #define inf…

【数据分析之道-基础知识(三)】元组

文章目录专栏导读1、元组简介2、元组创建3、元组查找操作4、元组删除操作5、元组修改操作6、元组增加操作7、元组内置函数专栏导读 ✍ 作者简介&#xff1a;i阿极&#xff0c;CSDN Python领域新星创作者&#xff0c;专注于分享python领域知识。 ✍ 本文录入于《数据分析之道》&…