第十一届蓝桥杯大赛省赛第二场C/C++B组

A 门牌制作

【思路】

将数值各位提取出来看是否等于2  类似于2021年省赛第一场数的组成

【代码】

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

int check(int i){
    int num=0;
    while(i){
        if(i%10==2) num++;
        i=i/10;
    }
    return num;
}

int main()
{
    int count=0;
    for(int i=1;i<=2020;i++){
        count+=check(i);
    }
    cout<<count<<endl;
    return 0;
}

【答案】624

B 既约分数

【思路】

使用gcd()最大公约数函数遍历1-2020 

【代码】

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

int gcd(int a,int b){
    if (b==0) return a;
    else return(b,a%b);
}

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

【答案】2481215

C  蛇形填数

【思路】

① excel表格一个个写出来 费时间

② 找规律 :第一行第一列 1

                    第二行第二列 5

                    第三行第三列 13

                    ……

由此可见 第n行第n列 2*n*n+*n+1

【代码】

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

int main(){
    int n;
    cin>>n;
	cout<<2*n*n - 2 * n + 1 << endl;	
	return 0;
}

【答案】761

D 跑步锻炼

【思路】

求出2000-1-1 到2020-10-1 的总天数 (记得判断闰年)再加上多跑一千米的天数即为答案

【代码】

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

int judge(int i){
    if((i%4==0&&i%100!=0)||(i%400==0))
        return 1;
    else return 0;
}

int month [13][2]={{0,0},{31,31},{28,29},{31,31},{30,30},{31,31},{30,30},{31,31},{31,31},{30,30},{31,31},{30,30},{31,31}};  //存储闰年和非闰年的每月天数

int main(){
    int y1,y2,m1,m2,d1,d2,week;
    int count=0;
    cin>>y1,m1,d1,week;
    cin>>y2>>m2>>d2;
    while(!((y1==y2)&&(m1==m2)&&(d1==d2))){
        d1++;
        week++;
        count++;
        if(d1==month[judge(y1)][m1]+1){
            d1=1;
            m1++;
        }
        if(m1>12){
            y1++;
            m1=1;
        }
        if((m1==1)||(week%7==1)) count++;
    }
    cout<<count+1<<endl;
    return 0;
}

【答案】8879

E 七段码

【思路】

暂未看懂 此思路来自网络:

一共七个灯管,状态压缩枚举所有状态,然后dfs(深度搜索)搜一下是否连通。

【答案】80

F 成绩统计

       

【思路】

输入n for循环 如果满足条件 就记下 及格率=及格人数/总人数*100%

使用round()四舍五入

【代码】

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

int main(){
    int n,score,pass=0,fine=0;
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>score;
        if(score>=60) pass++;
        if(score>=85) fine++;
    }
    cout<<round((float)paas/n*100)<<"%"<endl;
    cout<<round((float)fine/n*100)<<"%"<endl;

    return 0;
}

G 回文日期

  

【思路】

回文数的判断  

进一步判断ABABBABA型的回文数

H 子串分值和

      

 

I 平面切分

 

J 字串排序

【思路】

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值