第十一届蓝桥杯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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值