小钧桐带你康康第十一届菜鸡互啄杯(简称蓝桥杯)C/C++ b组省赛题目


我超勇的,我要打10个哟

结果填空题

试题A:门牌制作

【问题描述】

一条gai有2020个住户,所以有1-2020这么多个门牌编号。
小蓝制作门牌的方法是先制作 0 到 9 这几个数字字符,最后根据需要将字符粘贴到门牌上,例如门牌 1017 需要依次粘贴字符 1、 0、 1、 7,即需要 1 个字符 0, 2 个字符 1, 1 个字符 7。
请问要制作所有的 1 到 2020 号门牌,总共需要多少个字符 2?
就是最简单的问题了,一群数里面有多少个2,沙雕题目,缪杀!!

【解题代码】
#include<iostream>
#define ll long long
using namespace std;
int check(int num){
    int ans=0;
    while(num>0){
        if(num%10==2)ans++;
        num/=10;
    } 
    return ans;
}
int main(){
    ll ans=0;
    for(int i=1;i<2021;i++){
        ans+=check(i);
    }
    cout<<ans<<endl;
    return 0;
} 
答案:624

试题B:既约分数

【问题描述】

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

超级暴力,直接给我两层for俯冲

【解题代码】
#include<iostream>
#define ll long long
using namespace std;
int gcd(int a,int b){
    if(a<b){     //第一次调用的时候会用到,也可以写在外面,不放在函数里面 
        int temp=a;
        a=b;
        b=temp;
    }
    if(a%b==0) return b;
    else return gcd(b,a%b);     
}
int main(){
    ll ans=0;
    for(int i=1;i<2021;i++){
        for(int j=1;j<2021;j++){
            if(gcd(i,j)==1) ans++;
        }
    }
    cout<<ans<<endl;
    return 0;
}
答案:2481215

试题C:蛇形填数

【问题描述】

如下图所示,小明用从1 开始的正整数“蛇形”填充无限大的矩阵。
在这里插入图片描述

容易看出矩阵第二行第二列中的数是5。请你计算矩阵中第20 行第20 列的数是多少?

花里胡哨,直接模拟,让你无处遁形

【解题代码】
#include<iostream>
#include<iomanip>
using namespace std;
int main(){
    int cnt=0;//当前数
    int count=0;//当前层数
    int i=0;
    int j=0;// i,j为坐标
    int num=1;//层数
    int map[50][50];
    while(1){
        cnt++;
        count++;
        map[j][i]=cnt;
        if(count>=num){
            if(num%2==1){
                i++;
            }else{
                j++;
            }
            num++;
            count=0;
        }else{
            if(num%2==1){
                j--;
                i++;
            }else{
                j++;
                i--;
            }
        }
        if(num==40) break;
    } 
    for(int i=0;i<20;i++){
        for(int j=0;j<20;j++){
            cout<<setw(4)<<map[i][j]<<" ";
        }
        cout<<endl;
    }
    cout<<"最后的答案:"<<map[19][19]<<endl; 
    return 0;
}
答案:761

在这里插入图片描述

试题D:跑步锻炼

【问题描述】

小蓝每天都锻炼身体。
正常情况下,小蓝每天跑 1 千米。如果某天是周一或者月初(1 日),为了
激励自己,小蓝要跑 2 千米。如果同时是周一或月初,小蓝也是跑 2 千米。
小蓝跑步已经坚持了很长时间,从 2000 年 1 月 1 日周六(含)到 2020 年
10 月 1 日周四(含)。请问这段时间小蓝总共跑步多少千米?

【解题代码】
#include<iostream>
using namespace std;
int isrunyear(int year){
    if(year%4==0&&year%100!=0||year%400==0) return 1;
    else return 0;
}
int month[2][13]{
    {0,31,28,31,30,31,30,31,31,30,31,30,31},
    {0,31,29,31,30,31,30,31,31,30,31,30,31}
};
int main(){
    long long ans=2;//2020/1/1 跑2km哦 
    int year=2000,mon=1,day=1;
    int week=6;
    while(1){
        int flag=isrunyear(year);
        ans++;
        day++;
        week++;
        if(week==8) week=1;
        if(day>month[flag][mon]){
            day=1;
            mon++;
        }
        if(mon>12){
            mon=1;
            year++;
        }
        if(week==1||day==1) ans++;
        if(year==2020&&mon==10&&day==1) break;
    }
    cout<<ans<<endl;
    return 0;
}
答案:8879
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值