zoukankan      html  css  js  c++  java
  • 2020年第11届蓝桥杯C/C++B组 第二轮省赛

    # JJU-干干

    试题A :门牌制作

    【问题描述】

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

    【答案提交】
    这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

    代码:

    #include <stdio.h>
    #include <stdlib.h>
    
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    
    int main(int argc, char *argv[]) {
        int i;
        int temp;
        int count=0;
        for(i=1;i<=2020;i++){
            temp = i;
            while(temp!=0){
                if(temp%10==2){
                    count++;
                }
                temp = temp/10;
            }
        } 
        printf("%d",count);
        return 0;
    }

    运行结果:

    试题B :既约分数

    【问题描述】

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

    【答案提交】
    这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

    代码:

    #include <stdio.h>
    #include <stdlib.h>
    
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    
    // 辗转相除法求最大公约数 
    int gcd(int a, int b){
        int t;
        while(b!=0){
            t = a%b;
            a = b;
            b = t;
        }
        return a;
    } 
    
    int main(int argc, char *argv[]) {
        int i,j;
        int count=0;
        for(i=1;i<=2020;i++){
            for(j=1;j<=2020;j++){
                if(gcd(i,j)==1){
                    count++;
                }
            }
        }
        printf("%d",count);
        return 0;
    }

    运行结果:

    试题C 蛇形填数

    【问题描述】

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

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

    【答案提交】

    这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一
    个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。


    代码:

    #include <stdio.h>
    #include <stdlib.h>
    
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    
    /*
    将蛇形轨迹拉直:即计算第i斜行的长度 ,而我们所求的数是斜行的中间数,其=斜行末尾数-(第i斜行/2)  
    */
    
    int main(int argc, char *argv[]) {
        int i,j;
        int a[10000];
        int num=0;
        int count=0;
        for(i=1;i<=40;i++){
            for(j=1;j<=i;j++){
                num++;
            }
            if(i%2!=0){
                printf("%d ",num-(i/2));
                count++;
                a[count] = num-(i/2);
            }
        }
        printf("
    %d",a[20]);
        return 0;
    }

    运行结果:

     试题D :跑步训练

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

    【答案提交】
    这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

    代码:

     

    #include <stdio.h>
    #include <stdlib.h>
    
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    
    // 是否为闰年 
    int leap_year(int y){
        if((y%4==0&&y%100!=0)||y%400==0){
            return 1;
        }else{
            return 0;
        }
    }
    
    int main(int argc, char *argv[]) {
        int day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
        int y,m,d;
        int w=6; // 起始天2000/1/1是星期六,所以初始为6 
        int mileage=0; // 里程 
        for(y=2000;y<=2020;y++){
            for(m=1;m<=12;m++){
                for(d=1;d<=day[m]+((m==2)?leap_year(y):0);d++,w=w%7+1){
                    mileage++; 
                    if(d==1||w==1){  // 1日/周一多跑一公里 
                        mileage++; 
                    }
                    if(y==2020&&m==10&&d==1){
                        printf("%d",mileage) ;
                    }
                }
                
            }
        }
        return 0;
    }

    运行结果:

    试题F :成绩统计

    【问题描述】
    小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数。如果得分至少是 60 分,则称为及格。如果得分至少为 85 分,则称为优秀。
    请计算及格率和优秀率,用百分数表示,百分号前的部分四舍五入保留整数。

    【输入格式】
    输入的第一行包含一个整数 n,表示考试人数。接下来 n 行,每行包含一个 0 至 100 的整数,表示一个学生的得分。

    【输出格式】
    输出两行,每行一个百分数,分别表示及格率和优秀率。百分号前的部分四舍五入保留整数。

    【样例输入】

    7
    80
    92
    56
    74
    88
    100
    0

    【样例输出】

    71%
    43%

    【评测用例规模与约定】
    对于50% 的评测用例, 1 ≤ n ≤ 100。
    对于所有评测用例,1 ≤ n ≤10000。

    代码:

    #include <stdio.h>
    #include <stdlib.h>
    
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    
    int main(int argc, char *argv[]) {
        int n;
        int a[10000];
        int i;
        int pass_count=0;
        int good_count=0;
        int temp;
        int pass_rate;
        int good_rate;
        scanf("%d",&n) ;
        for(i=0;i<n;i++){
            scanf("%d",&a[i]);
        }
        for(i=0;i<n;i++){
            if(a[i]>=60){
                pass_count++;
            }
            if(a[i]>=85){
                good_count++;
            }
        }
        temp = pass_count*100%n;
        if(temp*2>=n){  // 及格率四舍五入 
            pass_rate = pass_count*100/n+1;
        }else{
            pass_rate = pass_count*100/n;
        }
        temp = good_count*100%n;
        if(temp*2>=n){  // 优秀率四舍五入 
            good_rate = good_count*100/n+1;
        }else{
            good_rate = good_count*100/n;
        }
        printf("%d%c
    ",pass_rate,'%'); 
        printf("%d%c",good_rate,'%'); 
        return 0;
    }

    运行结果:

    试题G :回文日期

    【问题描述】
    2020 年春节期间,有一个特殊的日期引起了大家的注意:2020年2月2日。因为如果将这个日期按“yyyymmdd” 的格式写成一个8 位数是20200202,
    恰好是一个回文数。我们称这样的日期是回文日期。
    有人表示20200202 是“千年一遇” 的特殊日子。对此小明很不认同,因为不到2年之后就是下一个回文日期:20211202 即2021年12月2日。
    也有人表示20200202 并不仅仅是一个回文日期,还是一个ABABBABA型的回文日期。对此小明也不认同,因为大约100 年后就能遇到下一个ABABBABA 型的回文日期:21211212 即2121 年12 月12 日。算不上“千年一遇”,顶多算“千年两遇”。
    给定一个8 位数的日期,请你计算该日期之后下一个回文日期和下一个ABABBABA型的回文日期各是哪一天。

    【输入格式】
    输入包含一个八位整数N,表示日期。

    【输出格式】
    输出两行,每行1 个八位数。第一行表示下一个回文日期,第二行表示下
    一个ABABBABA 型的回文日期。

    【样例输入】

    20200202

    【样例输出】

    20211202
    21211212


    【评测用例规模与约定】
    对于所有评测用例,10000101 ≤ N ≤ 89991231,保证N 是一个合法日期的8位数表示。

    代码:

    #include <stdio.h>
    #include <stdlib.h>
    
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    
    // 回文日期 
    int back_date(int n){
        int inverse_before4;  // 逆序日期的前四位 
        inverse_before4 = n%10*1000+n/10%10*100+n/100%10*10+n/1000;
        return n*10000 + inverse_before4; // 形成回文日期 
    }
    // AB型回文日期 
    int ab_back_date(int n){
        int ab_inverse_before2; // 逆序日期的前两位 
        ab_inverse_before2 = n%10*10+n/10;
        return n*1010000+ab_inverse_before2*101; // 形成AB型回文日期 
    }
    
    int main(int argc, char *argv[]) {
        int n;
        int backDate;
        int abBackDate;
        scanf("%d",&n);
        if(back_date(n/10000)>=n){
            backDate = back_date(n/10000+1); // 大于等于本身,则年份+1,生成回文日期 
        }else{
            backDate = back_date(n/10000);
        }
        if(ab_back_date(n/1000000)>=n){
            abBackDate = ab_back_date(n/1000000+1); //  // 大于等于本身,则年份开头两位+1,生成回文日期 
        }else{
            abBackDate = ab_back_date(n/1000000);
        }
        printf("%d
    ",backDate);
        printf("%d",abBackDate);
        return 0;
    }

    运行结果:

  • 相关阅读:
    Typescript中抽象类与接口详细对比与应用场景介绍
    html5手势操作与多指操作封装与Canvas图片裁切实战
    可编辑DIV与移动端软键盘兼容性问题汇总
    作业系统前端架构总结
    移动端滑屏全应用【四】移动端动画贞动画函数mTween封装
    移动端滑屏全应用【三】requestAnimationFrame的兼容与使用
    python2.7和python3.7的区别!
    通俗易懂地解释卷积
    傅里叶变换就是这么简单!
    大话傅里叶变换,通俗易懂!
  • 原文地址:https://www.cnblogs.com/ZZG-GANGAN/p/14669860.html
Copyright © 2011-2022 走看看