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;
}
相关文章
|
2月前
|
存储 人工智能 测试技术
2020年第十一届蓝桥杯模拟赛解题报告
2020年第十一届蓝桥杯模拟赛解题报告
|
2月前
|
测试技术 C语言
第十四届蓝桥杯B组第一期模拟题
第十四届蓝桥杯B组第一期模拟题
36 0
|
12月前
2022第十三届届蓝桥杯c++B组题解
2022第十三届届蓝桥杯c++B组题解
73 1
|
存储 人工智能 测试技术
十四届蓝桥杯模拟赛第三期(二)
十四届蓝桥杯模拟赛第三期
120 0
|
算法
十四届蓝桥杯模拟赛第三期(一)
十四届蓝桥杯模拟赛第三期
400 0
第14届蓝桥杯模拟赛 第2期
请找到一个大于 2022 的最小数,这个数转换成二进制之后,最低的 6 个二进制为全为 0 。请将这个数的十进制形式作为答案提交。
|
存储 机器学习/深度学习 人工智能
【蓝桥杯集训·周赛】AcWing 第 95 场周赛
文章目录 第一题 AcWing 4873. 简单计算 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 第二题 AcWing 4874. 约数 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 第三题 AcWing 4875. 整数游戏 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解
84 0
|
存储 机器学习/深度学习 人工智能
【蓝桥杯集训·周赛】AcWing 第94场周赛
文章目录 第一题 AcWing 4870. 装物品 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 第二题 AcWing 4871. 最早时刻 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 第三题 AcWing 4872. 最短路之和 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解
51 0
|
JavaScript BI
【蓝桥杯集训·周赛】AcWing 第96场周赛
文章目录 第一题 AcWing 4876. 完美数 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 第二题 AcWing 4877. 最大价值 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 第三题 AcWing 4878. 维护数组 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解
72 0
|
存储 人工智能 算法
【蓝桥杯集训·最后一次周赛】AcWing 第 97 场周赛
文章目录 第一题 AcWing 4944. 热身计算 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 第二题 AcWing 4945. 比大小 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 第三题 AcWing 4946. 叶子节点 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解
108 0