第十五届蓝桥杯模拟赛B组(第二期)C++

前言:

第一次做蓝桥模拟赛的博客记录,可能有很多不足的地方,现在将第十五届蓝桥杯模拟赛B组(第二期)的题目与代码与大家进行分享,我是用C++做的,有好几道算法题当时自己做的也是一脸懵,所以有好个别几道也是请教了其他大佬才分享出来的。

目录

​编辑

一、试题A

二、试题B

三、试题C

四、试题D

五、试题E

六、试题F

 七、试题G

八、试题H 

九、试题 I

十、试题 J


 

一、试题A

问题描述   

        小蓝要在屏幕上放置一行文字,每个字的宽度相同。   

        小蓝发现,如果每个字的宽为 36 像素,一行正好放下 30 个字,字符之间和前后都没有任何 空隙。   

        请问,如果每个字宽为 10 像素,字符之间不包含空隙,一行可以放下多少个字? 

没啥好说的,这就是一个小学数学题,36 ×30 / 10 =108

答案:108

二、试题B

问题描述   

        求 2^2023%1000,即 2的2023次方除以1000的余数。

%1000就是要求 2^2023后三位,因为只是一个填空题,所有我们直接用计算器就可以求出来

 答案:608

三、试题C

问题描述   

        如果一个正整数转化成二进制与转换成八进制后所有数位的数字之和相等,则称为数位和相等 的数。   

        前几个数位和相等的正整数为 1, 8, 9, 64, ……   

        请问第 23 个数位和相等的正整数是多少? 

 可以使用暴力或者写程序的方法进行求解

#include<bits/stdc++.h>

#define num first
#define y second

using namespace std;

typedef long long ll;
typedef unsigned long long ULL;
typedef pair<int,int> PII;

// 十进制数转换为任意n进制数
// num:十进制数,n:转换成n进制数

string Itoa(int num,int n) 
{
    string str;
    int rem;
    char ch;
    if(num == 0)
        str = "0";
    while(num > 0) 
    {
        rem = num % n;
        ch = (rem < 10) ? (rem + '0') : (rem - 10 + 'A');
        str = ch + str;
        num /= n;
     }
    return str;
}
// 计算每一位上的和
int sum(string str) 
{
    int sum = 0;
    for(int i = 0;i < str.length();i ++) 
    {
        sum += str[i] - '0';
    }
    return sum;
}
string str1;
string str2;
int main() 
{
    int cnt = 0;
    int i = 1;
    while(1) 
    {
        str1 = Itoa(i,2);
        str2 = Itoa(i,8);
        // cout<<i<<' '<<str1<<' '<<str2<<endl;
        if(sum(str1) == sum(str2)) 
        {
            cnt ++;
            cout << "数字为" << i << endl;
            cout << str1 << endl;
            cout << str2 << endl;
            cout << "cnt的值是" << cnt << endl;
        }
        if(cnt == 23) 
        {
            cout << "找到了!!!:>" << i << endl;
            cout << str1 << endl;
            cout << str2 << endl;
            break;
        }
        i ++;
    }
return 0;
}
数字为1
1
1
cnt的值是1
数字为8
1000
10
cnt的值是2
数字为9
1001
11
cnt的值是3
数字为64
1000000
100
cnt的值是4
数字为65
1000001
101
cnt的值是5
数字为72
1001000
110
cnt的值是6
数字为73
1001001
111
cnt的值是7
数字为512
1000000000
1000
cnt的值是8
数字为513
1000000001
1001
cnt的值是9
数字为520
1000001000
1010
cnt的值是10
数字为521
1000001001
1011
cnt的值是11
数字为576
1001000000
1100
cnt的值是12
数字为577
1001000001
1101
cnt的值是13
数字为584
1001001000
1110
cnt的值是14
数字为585
1001001001
1111
cnt的值是15
数字为4096
1000000000000
10000
cnt的值是16
数字为4097
1000000000001
10001
cnt的值是17
数字为4104
1000000001000
10010
cnt的值是18
数字为4105
1000000001001
10011
cnt的值是19
数字为4160
1000001000000
10100
cnt的值是20
数字为4161
1000001000001
10101
cnt的值是21
数字为4168
1000001001000
10110
cnt的值是22
数字为4169
1000001001001
10111
cnt的值是23
找到了!!!:>4169
1000001001001
10111

答案: 4169

四、试题D

问题描述   

        对于以下这些数(6行,每行6个,共36个),请问约数个数最多的是哪个?(如果有多个, 请回答出现最早的那个)   

        393353 901440 123481 850930 423154 240461   

        373746 232926 396677 486579 744860 468782   

        941389 777714 992588 343292 385198 876426   

        483857 241899 544851 647930 772403 109929

        882745 372491 877710 340000 659788 658675   

        296521 491295 609764 718967 842000 670302

约数个数模版题 

#include<bits/stdc++.h>

using namespace std;

const int N = 100010;

int primes[N], cnt;
bool st[N];

void init(int n)
{
    for (int i = 2; i <= n; i ++)
    {
        if (!st[i]) primes[cnt ++] = i;
        for (int j = 0; primes[j] * i <= n; j ++)
        {
            st[primes[j] * i] = true;
            if (i % primes[j] == 0) break;
        }
    }
}

void divide(int x)
{
     int res = 0;
     for (int i = 0; i < cnt; i ++)
     {
        int p = primes[i];
        if (x % p == 0)
        {
            while (x % p == 0)
            {
                res ++;
                {
                    x /= p;
                }
            }
        }
     }
     cout << res << endl;
}

int main()
{
    init(N);
    int m = 30;
    while (m--)
    {
        int x;
        cin >> x;
        divide(x);
    }
    return 0;
}

答案: 901440

五、试题E

问题描述   

        小蓝有一个01矩阵。他打算将第一行第一列的 0 变为 2 。变化过程有传染性,每次 2 的上下 左右四个相邻的位置中的 0 都会变成 2 。直到最后每个 2 的周围都是 1 或 2 结束。   请问,最终矩阵中有多少个 2 ?   

        以下是小蓝的矩阵,共 30 行 40 列。   0000100010000001101010101001001100000011   0101111001111101110111100000101010011111   1000010000011101010110000000001011010100   0110101010110000000101100100000101001001   0000011010100000111111001101100010101001   0110000110000000110100000000010010100011   0100110010000110000000100010000101110000   0010011010100110001111001101100110100010   1111000111101000001110010001001011101101   0011110100011000000001101001101110100001   0000000101011000010011111001010011011100   0000100000011001000100101000111011101100   0010110000001000001010100011000010100011   0110110000100011011010011010001101011011   0000100100000001010000101100000000000010   0011001000001000000010011001100101000110   1110101000011000000100011001001100111010   0000100100111000001101001000001010010001   0100010010000110100001100000110111110101   1000001001100010011001111101011001110001   0000000010100101000000111100110010101101   0010110101001100000100000010000010110011   0000011101001001000111011000100111010100   0010001100100000011000101011000000010101   1001111010010110011010101110000000101110   0110011101000010100001000101001001100010   1101000000010010011001000100110010000101   1001100010100010000100000101111111111100   1001011010101100001000000011000110110000   0011000100011000010111101000101110110001

 经典BFS(广度优先搜索)求联通块,由题意可知要求所有0的联通块中0的个数

#include<bits/stdc++.h>

#define x first
#define y second

using namespace std;

typedef pair<int, int> PII;
const int N = 45;
char g[N][N];
bool st[N][N];
int dx[4] = {1, 0, -1, 0}, dy[4] = {0, -1, 0, 1};
int ans;

void bfs(int x, int y)
{
    queue<PII> q;
    st[x][y] = true;
    q.push({x, y});
    ans++;
    while (q.size())
    {
        auto t = q.front();
        q.pop();
        for (int i = 0; i < 4; i++)
        {
            int a = dx[i] + t.x, b = dy[i] + t.y;
            if (a < 0 || a >= 30 || b < 0 || b >= 40) continue;
            if (st[a][b]) continue;
            if (g[a][b] != '0') continue;
            ans++;
            st[a][b] = true;
            q.push({a, b});
        }
    }
}
int main()
{
    for (int i = 0; i < 30; i++) cin >> g[i];
    bfs(0, 0);
    cout << ans << endl;
    return 0;
}

答案:541 

六、试题F

问题描述   

        给定一个正好六位的正整数 x,请将 x 循环左移一位后输出。   

        所谓循环左移一位,是指将原来的十万位变为个位,原来的万位到个位向左移动依次变为十万 位到十位。   

        例如:194910 左移一位变为 949101 。  

        又如:987123 左移一位变为 871239 。

输入格式

        输入一行包含一个整数 x 。保证输入的 x 正好包含 6 个十进制数位,而且十万位和万位上的数 字均不为 0 。

输出格式   

        输出一行包含一个整数,表示答案。 样例输入 194910 样例输出 949101

 直接字符串,简单模拟即可,我只能说这道题就是一道经典送分题,如果这都做不出来的话那就是真白学了

#include <bits/stdc++.h>

using namespace std;

int main()
{
    string s;
    cin >> s;
    for(int i = 1; i < s.size(); i ++)
        cout << s[i];
    cout << s[1];
    
    return 0;
}

 七、试题G

问题描述   

        输入一个仅包含小写英文字母的字符串,请问这个字符串中的最后一元音是什么。

        在英文中,a, e, i, o, u 共 5 个字母是元音字母,其它字母不是元音字母。

输入格式   

        输入一行包含一个字符串,仅由小写英文字符组成,字符串中至少包含一个元音字母

输出格式

        输出一行包含一个字符,表示答案。

样例输入

        lanqiao

样例输出

        o

样例输入

        cup

样例输出

        u

这道题应该和上一道题的难度不相上下吧,就是一个简单的循环遍历字符串模拟,从后往前输出第一个元音字母即可

#include <bits/stdc++.h>

using namespace std;

int main()
{
    string s;
    cin >> s;
    for(int i = s.size() - 1; i >= 0; i--)
    {
        if(s[i] == 'a' || s[i] == 'o' || s[i] == 'e' || s[i] == 'i' || s[i] == 'u')
        {
            cout << s[i] << endl;
            break;
        }
    }
    return 0;
}

八、试题H 

问题描述   

        给定一个整数,对这个整数的一次转换是指将这个整数变为这个整数的所有数位上的非零数字的乘积。   

        例如,对 123456789 进行一次转换变为 123456789=362880,再进行一次转换变为 36288=2304,再进行一次转换变为 234=24,再进行一次转换变为 8。   

        给定一个整数,请依次将转换过程中经历的每个整数输出,直到小于 10 。

输入格式   

        输入一行包含一个整数 n 。

输出格式   

        输出多行,每行包含一个整数。

样例输入

        123456789

样例输出

        362880

        2304

        24

        8

评测用例规模与约定   

        对于 50% 的评测用例,1 <= n <= 10^9 (10的9次方)。   

        对于所有评测用例,1 <= n <= 10^18 (10的18次方)。

 简单模拟即可

#include <bits/stdc++.h>

using namespace std;

int main()
{
    
    long long int n;
    cin >> n;
    long long int sum = 11; 
    while(sum >= 10)
    {
        sum = 1;
        while(n)
        {
            if((n % 10) != 0)
                sum *= n % 10;
            n /= 10;
        }
        cout << sum << " "<< endl;
        n = sum; 
    }
    return 0;
}

九、试题 I

问题描述   

        小蓝站在一个 n 行 m 列的方格图中间,方格图的每一个方格上都标有一个正整数。      如果两个相邻方格(上下左右四个方向相邻)内的数的最大公约数大于 1 ,则可以从其中一个 方格移动到另一个方格,当然也可以从另一个方格移回第一个方格。   

        假设小蓝开始时站在第 r 行第 c 列,请问小蓝可以移动到方格图内的多少个方格?

输入格式   

        输入的第一行包含两个整数 n, m ,用一个空格分隔,表示方格图的行数和列数。   接下来 n 行,每行包含 m 个正整数,相邻整数间用一个空格分隔,依次表示方格图中从第 1 行到第 n 行,每行从第 1 列到第 m 列中的数。   

        接下来一行包含两个整数 r, c,用一个空格分隔,表示小蓝所在的行号和列号。

输出格式   

        输出一行包含一个整数,表示答案。

样例输入 

3 4

3 6 5 5

2 4 3 5

7 8 3 8

3 2

样例输出 5

评测用例规模与约定   

        对于50%的评测用例,1 <= n, m <= 100,方格图中的每个数不超过 10^5 (10的5次方)。   

        对于所有评测用例,1 <= n, m <= 1000,方格图中的每个数不超过 10^9 (10的9次方)。

BFS模版题,就是加了求最大公约数的步骤 

#include<bits/stdc++.h>

#define x first
#define y second

using namespace std;
typedef pair<int, int> PII;
const int N = 1010;
int g[N][N];
int n, m;
int dx[4] = {1, 0, -1, 0}, dy[4] = {0, -1, 0, 1};
int ans;
bool st[N][N];

int gcd(int a, int b)
{
    return b ? gcd(b, a % b) : a;
}
void bfs(int x, int y)
{
    queue<PII> q;
    st[x][y] = true;
    q.push({x, y});
    ans++;
    while (q.size())
    {
        auto t = q.front();
        q.pop();
        for (int i = 0; i < 4; i++)
        {
            int a = dx[i] + t.x, b = dy[i] + t.y;
            if (a < 1 || a > n || b < 1 || b > m) continue;
            if (st[a][b]) continue;
            if (gcd(g[a][b], g[t.x][t.y]) <= 1) continue;
            st[a][b] = true;
            ans ++;
            q.push({a, b});
        }
    }
}
int main()
{
    cin >> n >> m;
    for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++)
    cin >> g[i][j];
    int x, y;
    cin >> x >> y;
    bfs(x, y);
    cout << ans << endl;
    return 0;
}

 

十、试题 J

问题描述   

        给定一个序列 a[1], a[2], …, a[n] 和一个整数 k,请找出一个长度正好为 k 的区间,使得区间中 所有数的和最大。   

        即要找到一个整数 p ,使得 1 <= p 且 p+k-1 <= n ,使得 a[p]+a[p+1]+...+a[p+k-1] 最大。

输入格式   

        输入的第一行包含两个整数 n , k。   

        第二行包含 n 个整数,相邻的整数之间使用一个空格分隔,表示给定的序列。

输出格式   

        输出一行包含一个整数,表示最大的区间和,你只需要输出和就行,不需要输出方案。 样例输入

         6 3 2 3 9 1 9 5

样例输出

        19

评测用例规模与约定   

        对于 30% 的评测用例,1 <= k <= n <= 30,1 <= a[i] <= 100。   

        对于 60% 的评测用例,1 <= k <= n <= 1000,1 <= a[i] <= 10000。   

        对于所有评测用例,1 <= k <= n <= 100000,1 <= a[i] <= 1000000。

 这个就是一个简单的滑动窗口,前缀和模版题,有一点需要注意,那就是开long long,要不然会超出范围

#include <bits/stdc++.h>

using namespace std;

int main()
{
    int n,k;
    cin >> n >> k;
    long long int s[100000];
    for(int i = 1; i <= n; i ++)
    {
        cin >> s[i];
        s[i] += s[i - 1];
    }
    long long int m;
    
    for(int i = 1; i + k - 1 <= n; i ++)
    {
        m = max(s[i + k - 1] - s[i - 1],m);
    }
    cout << m << endl;
    
    return 0;
}

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

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

相关文章

财报解读:立足海外音视频直播战场,欢聚的BIGO盾牌还需加强?

如今&#xff0c;音视频社交平台出海早已不是新鲜事&#xff0c;随着时间推移&#xff0c;一批“坚定全球化不动摇”的企业也实现突围&#xff0c;站在出海舞台中心。 若提到中国企业出海范本&#xff0c;欢聚集团定是绕不开的存在。作为最早一批出海的中国互联网企业&#xf…

CS144(2023 Spring)Lab 0:networking warmup(环境搭建 webget bytestream)

文章目录 前言其他笔记相关链接 1. Set up GNU/Linux on your computer2. Networking by hand3. Writing a network program using an OS stream socket3.1 Linux配置3.2 C规范3.3 Writing webget3.3.1 实现3.3.2 测试 4. An in-memory reliable byte stream4.1 思路分析4.2 代…

记录 | vscode设置自动换行

右上菜单栏 -> 查看 -> 打开自动换行 或者还有种方式&#xff0c;如下&#xff0c; 左下角小齿轮&#xff0c;点击设置 然后输入 Editor: Word Wrap &#xff0c;把开关打开为 on

扩散模型实战(十四):扩散模型生成音频

推荐阅读列表&#xff1a; 扩散模型实战&#xff08;一&#xff09;&#xff1a;基本原理介绍 扩散模型实战&#xff08;二&#xff09;&#xff1a;扩散模型的发展 扩散模型实战&#xff08;三&#xff09;&#xff1a;扩散模型的应用 扩散模型实战&#xff08;四&#xff…

使用 Go Modules 管理依赖:简明教程

一、GoLang 中包的介绍和定义 包&#xff08;package&#xff09;是多个 Go 源码的集合&#xff0c;是一种高级的代码复用方案Go 语言为我们提供了很多内置包&#xff0c;如 fmt、strconv、strings、sort、errors、times、encoding/json、os、io 等Golang 中的包可以分为三种&…

C# WPF上位机开发(图形显示软件)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 在实际应用中&#xff0c;有一种情况就是&#xff0c;我们需要经常对数据进行图形化显示&#xff0c;这样会比较直观一点。比如经济统计里面的同比…

宝塔部署appache部署ssl证书无法访问443端口

原因&#xff1a; 不是部署方法错误&#xff0c;而是操作不当&#xff0c;原来一开始为了测试我去修改了appache默配置路径下的httpd-ssl.donf&#xff0c;此文件一般 在appche/conf/extra/目录下&#xff08;版本不同目录可能有所区别&#xff09;。 导致问题&#xff1a; 在…

【数据结构和算法】到达首都的最少油耗

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 三、代码 四、复杂度分析 前言 这是力扣的2477题&#xff0c;难度为中等&#xff0c;解题方案有很多种&…

用友NC Cloud FileParserServlet反序列化RCE漏洞复现

0x01 产品简介 用友 NC Cloud 是一种商业级的企业资源规划云平台,为企业提供全面的管理解决方案,包括财务管理、采购管理、销售管理、人力资源管理等功能,实现企业的数字化转型和业务流程优化。 0x02 漏洞概述 用友 NC Cloud FileParserServlet接口存在反序列化代码执行漏…

Amazon CodeWhisperer 正式可用, 并面向个人开发者免费开放

文章作者&#xff1a;深度-围观 北京——2023年4月18日&#xff0c;亚马逊云科技宣布&#xff0c;实时 AI 编程助手 Amazon CodeWhisperer 正式可用&#xff0c;同时推出的还有供所有开发人员免费使用的个人版&#xff08;CodeWhisperer Individual&#xff09;。CodeWhisperer…

微服务1 springcloud学习笔记P1-P40

b微服务技术栈_哔哩哔哩_bilibili 文档资料: 链接&#xff1a;https://pan.baidu.com/s/1P_Ag1BYiPaF52EI19A0YRw?pwdd03r 提取码&#xff1a;d03r 一 了解微服务技术 二 Eureka (1) Eureka配置 (2) 注册user-service (3) 总结 Ribbon 负载均衡 (1) 流程 三 nacos配置管理…

在AWS EC2中部署和使用Apache Superset的方案

大纲 1 Superset部署1.1 启动AWS EC21.2 下载Superset Docker文件1.3 修改Dockerfile1.4 配置管理员1.5 结果展示1.6 检查数据库驱动1.7 常见错误处理 2 Glue&#xff08;可选参考&#xff09;3 IAM与安全组3.1 使用AWS Athena3.2 使用AWS RedShift或AWS RDS3.2.1 查看AWS Reds…

JavaScript <md5加密的两种不同输出结果分析>--案例(二点一)

前言: 问题是这样的,在浏览器中看到这段代码 然后在控制台进行输出.得到: 紧接着,就在,js文件里面进行转译: 可是,得到的结果是: 这是问题!!! 正题: 为什么相同的js代码,在 .js 文件中的输出与 Chrome 控制台中的输出不一样? 环境差异&#xff1a;不同的JavaScript环境&…

dante(centos)安装

下载安装包 https://www.inet.no/dante/doc/latest/config/index.html 下载软件 解压 tar -zxvf dante-1.4.3.tar.gz 或者 wget http://www.inet.no/dante/files/dante-1.4.3.tar.gz tar -xvzf dante-1.4.3.tar.gz 编译 cd dante-1.4.3 yum install gcc make -y ##编译必备 …

活动目录是什么?

企业在进行数字化转型时&#xff0c;也会面临日益增长的网络用户和复杂的身份管理需求。为了高效地管理用户身份、控制访问权限以及保护企业的数据安全&#xff0c;许多企业选择使用微软的Active Directory&#xff0c;即微软活动目录&#xff0c;来作为网络身份管理系统。 1、…

DS图应用--最短路径

Description 给出一个图的邻接矩阵&#xff0c;再给出指定顶点v0&#xff0c;求顶点v0到其他顶点的最短路径 Input 第一行输入t&#xff0c;表示有t个测试实例 第二行输入n&#xff0c;表示第1个图有n个结点 第三行起&#xff0c;每行输入邻接矩阵的一行&#xff0c;以此类…

关于先更新再缓存这种缓存方案设计的思考

这两天正在做公司缓存方面的设计&#xff0c;然后就把自己的思考过程整理一下。 网上对于这块的内容讲解也非常的多&#xff0c;有些说的也都非常的在理&#xff0c;关于缓存一致性的方案也就那么几种&#xff0c;如&#xff1a;先更新、再删&#xff0c;先删、在更新&#xff…

【Polar靶场WEB签到】

题目&#xff1a; <?phperror_reporting(0);$file $_GET[file];if(!isset($file))$file 1;$file str_replace(../, , $file);include_once($file.".php");highlight_file(__FILE__); ?>解答&#xff1a;1、进入index页面&#xff0c;说让你加弟弟&#x…

WordPiece词表的创建

文章目录 一、简单介绍二、步骤流程2.1 预处理2.2 计数2.3 分割2.4 添加subword 三、代码实现 本篇内容主要介绍如何根据提供的文本内容创建 WordPiece vocabulary&#xff0c;代码来自谷歌&#xff1b; 一、简单介绍 wordpiece的目的是&#xff1a;通过考虑单词内部构造&…

算法通关村第十七关-青铜挑战贪心算法思想

大家好我是苏麟 , 今天说说贪心算法 . 贪心思想很难用理论解释&#xff0c;本文我们先通过案例来感受一下贪心是如何解决问题的 大纲 难以理解的贪心算法贪心问题举例分发饼干柠檬水找零分发糖果 难以理解的贪心算法 贪心的思想非常不好解释&#xff0c;而且越使用权威的语言解…
最新文章