第十一届蓝桥杯C/C++A组省赛全题解

A.门牌制作(5分,填空题)

【问题描述】

    小蓝要为一条街的住户制作门牌号。

    这条街一共有 2020 位住户,门牌号从 1 到 2020 编号。

    小蓝制作门牌的方法是先制作 0 到 9 这几个数字字符,最后根据需要将字符粘贴到门牌上,例如门牌 1017 需要依次粘贴字符 1、0、1、7,即需要 1 个字符 0,2 个字符 1,1 个字符 7。请问要制作所有的 1 到 2020 号门牌,总共需要多少个字符 2?

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n=1,all=0;
    while(n<=2020){   
        int x=n;
        while(x){
            int r=x%10;
            if(r==2) all++;
            x=x/10;
        }
        n++;
    }
    cout<<all<<endl;
    return 0;
}

难度:签到题(简单)

题解:枚举,统计每一个门牌号字符2的个数

答案:624


B.既约分数(5分,填空题)

【问题描述】

    如果一个分数的分子和分母的最大公约数是 1,这个分数称为既约分数。
    例如,3/4 , 5/2 , 1/8 , 7/1 都是既约分数。
    请问,有多少个既约分数,分子和分母都是 1 到 2020 之间的整数(包括 1 和 2020)?

#include<bits/stdc++.h>
using namespace std;

int gcd(int i,int j){          //计算最大公约数
    if(i%j==0) return j;
    else return gcd(j,i%j);
}

int main(){
    int sum=0;
    for(int i=1;i<=2020;i++)
        for(int j=1;j<=2020;j++){
            if(gcd(i,j)==1) sum++;
        }
    cout<<sum<<endl;
    return 0;
}

难度:签到题(简单)

题解:枚举,判断分子和分母是不是互质

答案:2481215


C.蛇形填数(10分,填空题)

【问题描述】

    如下图所示,小明用从 1 开始的正整数“蛇形”填充无限大的矩阵。
    1 2 6 7 15 …
    3 5 8 14 …
    4 9 13 …
    10 12 …
    11 …
    …
    容易看出矩阵第二行第二列中的数是 5。请你计算矩阵中第 20 行第 20 列
的数是多少?

#include<bits/stdc++.h>
using namespace std;
int f[40];

int main(){
    f[1]=1;
    for(int i=2;i<=39;i++){
        f[i]=f[i-1]+i;
}
    int x=(f[39]+f[38]+1)/2;
    cout<<x<<endl;
    return 0;
}

难度: 适中

题解:找规律,矩阵中间的值为对角线两端和的均值(2n+1个数情况下)。第n条对角线有n个数,该对角线上的最大值是1+2+...+n。可以判断第20行第20列的数在第39条斜对角线,则该对角线的中间值为(第39条对角线最大值+第38条对角线最大值+1)/2

答案:761


D.7段码(10分,填空题)

【问题描述】

    小蓝要用七段码数码管来表示一种特殊的文字。

    七段码上图给出了七段码数码管的一个图示,数码管中一共有 7 段可以发光的二极管,分别标记为 a, b, c, d, e, f, g。小蓝要选择一部分二极管(至少要有一个)发光来表达字符。在设计字符的表达时,要求所有发光的二极管是连成一片的。

    例如:b 发光,其他二极管不发光可以用来表达一种字符。

    例如:c 发光,其他二极管不发光可以用来表达一种字符。这种方案与上一行的方案可以用来表示不同的字符,尽管看上去比较相似。

    例如:a, b, c, d, e 发光,f, g 不发光可以用来表达一种字符。

    例如:b, f 发光,其他二极管不发光则不能用来表达一种字符,因为发光的二极管没有连成一片。

    请问,小蓝可以用七段码数码管表达多少种不同的字符?

#include<bits/stdc++.h>  //递归枚举+并查集
using namespace std;
int book[10],res=0,f[10];
int u[10]={0,1,2,3,4,5,1,3}; //存边的端点
int v[10]={0,2,3,4,5,6,6,6};
int f
### 第十一届蓝桥杯 C++ B 题解与经验总结 #### 基础知识点概述 第十一届蓝桥杯 C++ B考察的知识点较为广泛,涵盖了简单的数学计算、字符串处理、模拟算法以及动态规划等内容。对于参者而言,熟悉这些基础知识是非常重要的[^2]。 #### 解析具体题目 以下是针对部分典型题目的解析: 1. **填空题** - 这类题目通常涉及基本的数学运算或者逻辑推理。例如,在某道填空题中可能需要考生快速判断某个数值范围内的素数数量。这类问题可以通过埃拉托色尼筛法高效解决。 2. **简单模拟** - 模拟问题是比中常见的类型之一,它要求选手按照给定规则逐步操作数据结构来得出最终结果。比如一道关于队列进出顺序的问题可以借助 STL 中 queue 容器轻松实现。 3. **广度优先搜索 (BFS) 和深度优先搜索 (DFS)** - 对于一些路径寻找或连通性检测的问题,则需要用到 BFS 或 DFS 技术。这两种方法均能有效探索图中的节点关系,并找到目标位置或是验证是否存在特定连接情况。 4. **动态规划 (DP) 初步应用** - 动态规划作为优化求解复杂问题的强大工具,在某些情况下也被引入到此类竞当中。虽然当前阶段很多学生还未完掌握 DP 的精髓——即如何设计合适的状态转移方程,但对于相对直观的小规模实例还是能够尝试运用递推思想去解答。 ```cpp // 示例代码:使用BFS解决问题 #include <bits/stdc++.h> using namespace std; int main(){ int n; cin >> n; // 输入矩阵大小n*n vector<vector<int>> grid(n, vector<int>(n)); for(auto &row : grid){ for(auto &cell : row){ cin >> cell; // 初始化网格 } } bool visited[n][n]; memset(visited, false, sizeof(visited)); queue<pair<int,int>> q; q.push({0, 0}); visited[0][0]=true; while(!q.empty()){ auto current=q.front(); q.pop(); // 处理当前位置... // 将未访问过的邻居加入队列 if(current.first+1<n && !visited[current.first+1][current.second]){ visited[current.first+1][current.second]=true; q.push({current.first+1,current.second}); } // 类似地检查其他方向... } } ``` #### 参加比的经验分享 - **时间管理**: 在有限时间内合理分配每道题的时间至关重要。建议先浏览部试题,从最容易得分的部分入手。 - **调试技巧**: 编写清晰简洁的程序有助于减少错误率;同时利用样例输入反复测试自己的解决方案直至确认无误再提交。 - **心理素质培养**: 保持冷静头脑面对突发状况也是成功的关键因素之一。即使遇到难题也不要慌张,继续专注剩余可做之题。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值