2022 第十四届蓝桥杯模拟赛第一期(题解与标程)(上)

简介: 2022 第十四届蓝桥杯模拟赛第一期(题解与标程)

第十四届蓝桥杯大赛个人赛(软件类)校内模拟赛一共有两期,包含C/C++程序设计、Java软件开发、Python程序设计、Web应用开发所有省赛科目,无论你是想加深对蓝桥杯省赛试题的了解,还是单纯测试自己的技术水平,只要你对算法感兴趣,就千万别错过。


温馨提示,这两场模拟赛都是免费的。我参加的是第一期(10月31日-11月13日), 第二期是(11月21日- 12月4日),注册大赛官网dasai.lanqiao.cn后,就可以免费参加了。


1. 二进制位数

问题描述

十进制整数 2 在十进制中是 1 位数,在二进制中对应 10 ,是 2 位数。

十进制整数 22 在十进制中是 2 位数,在二进制中对应 10110 ,是 5 位数。

请问十进制整数 2022 在二进制中是几位数?

答案提交

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

参考答案

11


#include <iostream>
#include <string>
#include <stack>
#include <map>
#include <algorithm>
#include <vector>
#include <queue>
#include <deque>
#include <set>
using namespace std;
int main() {
    int n, cnt = 0;
    cin >> n;
    while (n) {
        cnt++;
        n /= 2;
    }
    cout << cnt << endl;
    return 0;
}

2. 晨跑

问题描述

小蓝每周六、周日都晨跑,每月的 1、11、21、31日也晨跑。其它时间不晨跑。

已知 2022年1月1日是周六,请问小蓝整个2022年晨跑多少天?

答案提交

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

参考答案

138

#include<iostream>
#include<string>
#include<stack>
#include <map>
#include<algorithm>
#include <vector>
#include <queue>
#include <deque>
#include <set>
using namespace std;
typedef long long ll;
int d[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int main() {
    int ans = 0;
    int week = 6;
    for (int i = 1; i <= 12; i++) {
        for (int j = 1; j <= d[i]; j++) {
            if (week == 6 || week == 0 || j == 1 || j == 11 || j == 21 || j == 31) {
                ans++;
            }
            week++;
            week = week % 7;
        }
    }
    cout << ans << endl;
    return 0;
}

3. 调和级数

问题描述

小蓝特别喜欢调和级数 S(n)=1/1+1/2+1/3+1/4+…+1/n 。

请问,n 至少为多大时,S(n)>12 ?

答案提交

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

参考答案

91380

#include<iostream>
#include<string>
#include<stack>
#include <map>
#include<algorithm>
#include <vector>
#include <queue>
#include <deque>
#include <set>
using namespace std;
int main() {
    int ans = 0;
    double s = 0;
    while (s <= 12) {
        s += 1.0 / (ans + 1.0);
        ans++;
    }
    cout << ans << endl;
    return 0;
}

程序验证

看到评论区里比较多人对这个题的结果存在疑问,故写了个Python程序进行验证,代码和结果分别如下

def cal(n):
    ans, i = 0.0, 1.0
    while i <= n:
        ans += 1.0 / i
        i += 1.0
    return ans
if __name__ == '__main__':
    print('1:\t\t' + str(cal(1)))
    print('2:\t\t' + str(cal(2)))
    print('91378:\t' + str(cal(91378)))
    print('91379:\t' + str(cal(91379)))
    print('91380:\t' + str(cal(91380)))
    print('91381:\t' + str(cal(91381)))
    print('91382:\t' + str(cal(91382)))

52f9e10901104a03b6e6f34bfbd08ac4.png

如上图,因此91380是正确的。

4. 山谷

问题描述

给定一个字母矩阵,如果矩阵中的某个位置不在四条边上,而且该位置上的字母小于其上下左右四个位置的字母,则称为一个山谷。

例如,对于如下矩阵

DDDDD

CADCE

FFFFA


共有两个山谷,位于第二行第二列和第四列。请注意第二行第三列和第三行第五列都不是山谷。

对于如下30行60列的字母矩阵(请用等宽字体查看),请问有多少个山谷?


PHQGHUMEAYLNLFDXFIRCVSCXGGBWKFNQDUXWFNFOZVSRTKJPREPGGXRPNRVY

STMWCYSYYCQPEVIKEFFMZNIMKKASVWSRENZKYCXFXTLSGYPSFADPOOEFXZBC

OEJUVPVABOYGPOEYLFPBNPLJVRVIPYAMYEHWQNQRQPMXUJJLOOVAOWUXWHMS

NCBXCOKSFZKVATXDKNLYJYHFIXJSWNKKUFNUXXZRZBMNMGQOOKETLYHNKOAU

GZQRCDDIUTEIOJWAYYZPVSCMPSAJLFVGUBFAAOVLZYLNTRKDCPWSRTESJWHD

IZCOBZCNFWLQIJTVDWVXHRCBLDVGYLWGBUSBMBORXTLHCSMPXOHGMGNKEUFD

XOTOGBGXPEYANFETCUKEPZSHKLJUGGGEKJDQZJENPEVQGXIEPJSRDZJAZUJL

LCHHBFQMKIMWZOBIWYBXDUUNFSKSRSRTEKMQDCYZJEEUHMSRQCOZIJIPFION

EEDDPSZRNAVYMMTATBDZQSOEMUVNPPPSUACBAZUXMHECTHLEGRPUNKDMBPPW

EQTGJOPARMOWZDQYOXYTJBBHAWDYDCPRJBXPHOOHPKWQYUHRQZHNBNFUVQNQ

QLRZJPXIOGVLIEXDZUZOSRKRUSVOJBRZMWZPOWKJILEFRAAMDIGPNPUUHGXP

QNJWJMWAXXMNSNHHLQQRZUDLTFZOTCJTNZXUGLSDSMZCNOCKVFAJFRMXOTHO

WKBJZWUCWLJFRIMPMYHCHZRIWKBARXBGFCBCEYHJUGIXWTBVTREHBBCPXIFB

XVFBCGKCFQCKCOTZGKUBMJRMBSZTSSHFROEFWSJRXJHGUZYUPZWWEIQURPIX

IQFLDUUVEOOWQCUDHNEFNJHAIMUCZFSKUIDUBURISWTBRECUYKABFCVKDZEZ

TOIDUKUHJZEFCZZZBFKQDPQZIKFOBUCDHTHXDJGKJELRLPAXAMCEROSWITDP

TPCCLIFKELJYTIHRCQAYBNEFXNXVGZEDYYHNGYCDRUDMPHMECKOTRWOSPOFG

HFOZQVLQFXWWKMFXDYYGMDCASZSGOVSODKJGHCWMBMXRMHUYFYQGAJQKCKLZ

NAYXQKQOYZWMYUBZAZCPKHKTKYDZIVCUYPURFMBISGEKYRGZVXDHPOAMVAFY

RARXSVKHTQDIHERSIGBHZJZUJXMMYSPNARAEWKEGJCCVHHRJVBJTSQDJOOTG

PKNFPFYCGFIEOWQRWWWPZSQMETOGEPSPXNVJIUPALYYNMKMNUVKLHSECDWRA

CGFMZKGIPDFODKJMJQWIQPUOQHIMVFVUZWYVIJGFULLKJDUHSJAFBTLKMFQR

MYJFJNHHSSQCTYDTEAMDCJBPRHTNEGYIWXGCJWLGRSMEAEARWTVJSJBAOIOJ

LWHYPNVRUIHOSWKIFYGTYDHACWYHSGEWZMTGONZLTJHGAUHNIHREQGJFWKJS

MTPJHAEFQZAAULDRCHJCCDYRFVVRIVUYEEGFIVDRCYGURQDREDAKUBNFGUPR

OQYLOBCWQXKZMAUSJGMHCMHGDNMPHNQKAMHURKTRFFACLVGRZKKLDACLLTEO

JOMONXRQYJZGINRNNZWACXXAEDRWUDXZRFUSEWJTBOXVYNFHKSTCENAUMNDD

XFDMVZCAUTDCCKXAAYDZSXTTOBBGQNGVVPJGOJOGLMKXGBFCPYPCKQCHBDDZ

WRXBZMQRLXVOBTWHXGINFGFRCCLMZNMJUGWWBSQFCIHUBSJOLLMSQSGHMCPH

ELSOTFLBGSFNPCUZSRUPCHYNVZHCPQUGRIWNIQXDFJPWPXFBLKPNPEELFJMT

答案提交

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

参考答案

276

输入重定向一下,然后直接遍历整个矩阵

#include<iostream>
#include<string>
#include<stack>
#include <map>
#include<algorithm>
#include <vector>
#include <queue>
#include <deque>
#include <set>
using namespace std;
int main() {
    freopen("in.txt", "r", stdin);
    int ans = 0;
    string *s = new string[30];
    for (int i = 0; i < 30; i++) {
        cin >> s[i];
    }
    for (int i = 1; i < 29; i++) {
        for (int j = 1; j < 59; j++) {
            if (s[i][j] < s[i - 1][j] && s[i][j] < s[i + 1][j] && s[i][j] < s[i][j - 1] && s[i][j] < s[i][j + 1]) {
                ans++;
            }
        }
    }
    cout << ans << endl;
    return 0;
}

5. 最小矩阵

问题描述

小蓝有一个 100 行 100 列的矩阵,矩阵的左上角为 1。其它每个位置正好比其左边的数大 2,比其上边的数大 1 。

例如,第 1 行第 2 列为 3,第 2 行第 2 列 为 4,第 10 行第 20 列为 48。

小蓝想在矩阵中找到一个由连续的若干行、连续的若干列组成的子矩阵,使得其和为 2022,请问这个子矩阵中至少包含多少个元素(即子矩阵的行数和列数的乘积)。

答案提交

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

参考答案

12

数据不大,直接暴力

#include<iostream>
#include<string>
#include<stack>
#include <map>
#include<algorithm>
#include <vector>
#include <queue>
#include <deque>
#include <set>
using namespace std;
typedef long long ll;
vector<vector<int>> adj(100);
int inline sum(int a, int b, int c, int d) {
    int res = 0;
    for (int i = a; i < a + c; i++) {
        for (int j = b; j < b + d; j++) {
            res += adj[i][j];
        }
    }
    return res;
}
int main() {
    for (int i = 0; i < 100; i++) {
        adj[i].push_back(i + 1);
        for (int j = 1; j < 100; j++) {
            adj[i].push_back(adj[i][j - 1] + 2);
        }
    }
    int ans = 10001;
    for (int i = 0; i < 100; i++) {
        for (int j = 0; j < 100; j++) {
            for (int k = 1; k <= 100 - i; k++) {
                for (int l = 1; l <= 100 - j; l++) {
                    if (sum(i, j, k, l) == 2022) {
                        ans = min(ans, k * l);
                        break;
                    } else if (sum(i, j, k, l) > 2022) break;
                }
            }
        }
    }
    cout << ans << endl;
    return 0;
}
相关文章
|
SQL 网络协议 程序员
计算机网络体系结构图解
计算机网络体系结构图解
1099 0
|
9月前
|
前端开发 JavaScript 开发者
前端 CSS 优化:提升页面美学与性能
前端CSS优化旨在提升页面美学与性能。通过简化选择器(如避免复杂后代选择器、减少通用选择器使用)、合并样式表、合理组织媒体查询,可减少浏览器计算成本和HTTP请求。利用硬件加速和优化动画帧率,确保动画流畅。定期清理冗余代码并使用缩写属性,进一步精简代码。这些策略不仅加快页面加载和渲染速度,还提升了视觉效果,为用户带来更优质的浏览体验。
|
小程序 JavaScript Java
座位预约|座位预约小程序|基于微信小程序的图书馆自习室座位预约管理系统设计与实现(源码+数据库+文档)
座位预约|座位预约小程序|基于微信小程序的图书馆自习室座位预约管理系统设计与实现(源码+数据库+文档)
706 0
|
网络协议 网络架构
彻底弄懂ip掩码中的网络地址、广播地址、主机地址
彻底弄懂ip掩码中的网络地址、广播地址、主机地址
2329 0
|
Java 关系型数据库 MySQL
Eclipse中出现javax.servlet.ServletException: javax.servlet.jsp.JspTagException: ...500问题
Eclipse中出现javax.servlet.ServletException: javax.servlet.jsp.JspTagException: ...500问题
1001 0
Eclipse中出现javax.servlet.ServletException: javax.servlet.jsp.JspTagException: ...500问题
|
消息中间件 存储 大数据
深度分析:Apache Kafka及其在大数据处理中的应用
Apache Kafka是高吞吐、低延迟的分布式流处理平台,常用于实时数据流、日志收集和事件驱动架构。与RabbitMQ(吞吐量有限)、Pulsar(多租户支持但生态系统小)和Amazon Kinesis(托管服务,成本高)对比,Kafka在高吞吐和持久化上有优势。适用场景包括实时处理、数据集成、日志收集和消息传递。选型需考虑吞吐延迟、持久化、协议支持等因素,使用时注意资源配置、数据管理、监控及安全性。
|
人工智能 自然语言处理 搜索推荐
2023云栖大会 | 阿里云发布通义千问2.0
今天,阿里云正式发布千亿级参数大模型通义千问2.0。在10个权威测评中,通义千问2.0综合性能超过GPT-3.5,正在加速追赶GPT-4。通义千问APP在各大手机应用市场正式上线,所有人都可通过APP直接体验最新模型能力。
3177 10
|
算法 Java 测试技术
蓝桥杯-02-蓝桥杯Java组考点与14届真题
蓝桥杯-02-蓝桥杯Java组考点与14届真题
|
机器学习/深度学习 自然语言处理 算法
2021-4月Python 机器学习——中文新闻文本标题分类(简单容易版)
2021-4月Python 机器学习——中文新闻文本标题分类(简单容易版)
578 0