• 2020年第11届蓝桥杯C/C++B组 第一轮省赛


    # JJU-干干

    试题 A: 跑步训练

    在这里插入图片描述

    代码:

    #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 power=10000;
        int time;
        int redP = 600/60; //每秒减少体力 
        int addP = 300/60; // 每秒增加体力 
        int flag=1;        //小明先跑,即先消耗,flag=1(奇数),再休息,即增加体力,flag=0 (偶数) 
        for(time=1;;time++){
            if(flag==1){
                power-=redP;
            }else{
                power+=addP;
            }
            if(power<=0){
                break;
            }
            if(time%60==0){
                if(flag==1){
                    flag=0; // 奇数个60秒后,接下来就是第偶数个60秒,即为增加体力 
                }else{
                    flag=1; // 偶数个60秒后,接下来就是第奇数个60秒,即为减少体力 
                }
            }
        }
        printf("%d",time);
        return 0;
    }

    运行结果:

    试题 F: 整除序列

    在这里插入图片描述

    代码:

    #include <iostream>
    #include <bits/stdc++.h> 
    using namespace std;
    typedef long long ll;
    
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    
    int main(int argc, char *argv[]) {
        ll n;
        cin >>n;
        while(n!=0){
            printf("%lld ",n);
            //n >>=1;
            n = n/2;
        }
        return 0;
    }

    运行结果:

    试题 G:解码(程序设计)

    题意
    在这里插入图片描述
    在这里插入图片描述

    代码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    
    int main(int argc, char *argv[]) {
        char a[10000];
        int len;
        int i,j;
        char temp;
        gets(a);
        len = strlen(a);
        for(i=0;i<len;i++){
            if((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z')){
                printf("%c",a[i]);
                temp = a[i];
            }
            if(a[i]>='2'&&a[i]<='9'){
                for(j=0;j<(a[i]-'0'-1);j++){
                    printf("%c",temp);
                }
            }
                
        }
        return 0;
    }

    运行结果:

    试题 I:整数拼接(程序设计)

    题意
    在这里插入图片描述
    在这里插入图片描述

    代码

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    /*代码有待改进,不能满足所有的实例,50%的实例应该可以*/ 
    
    // 计算数的位数 
    int cal_len(int n){
        int count=0;
        while(n!=0){
            count++;
            n=n/10;
        }
        return count;
    }
    
    // 计算10的n次方 
    int cal_pow(int n){
        int sum=1;
        int i=0;
        for(i=0;i<n;i++){
            sum*=10;
        }
        return sum;
    }
    
    // 计算拼接后数的和 
    int cal_sum(long n1,long n2,long len){
        long sum1=0;
        long sum2=0;
        long i=0;
        while(n1!=0){
            sum1+=(n1%10)*cal_pow(i+len);
            i++;
            n1=n1/10;
        }
        i=0;
        while(n2!=0){
            sum2+=(n2%10)*cal_pow(i);
            i++;
            n2=n2/10;
        }
        return (sum1+sum2);
    }
    
    
    int main(int argc, char *argv[]) {
        long a[10000];
        long n,k;
        int i,j;
        int count=0;
        long sum;
        int len1,len2;
        
        scanf("%d",&n);
        scanf("%d",&k);
        for(i=0;i<n;i++){
            scanf("%d",&a[i]);
        }
         
        for(i=0;i<n;i++){
            for(j=i+1;j<n;j++){
                len1 = cal_len(a[i]);
                len2=cal_len(a[j]);
                sum = cal_sum(a[i],a[j],len2);
                if(sum%k==0) count++;
                sum = cal_sum(a[j],a[i],len1);
                if(sum%k==0) count++;
            }
        }
        printf("%d",count);
        return 0;
    }

    运行结果:

    试题 H:走方格(程序设计)

    题意
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    代码:

    #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 a[40][40];
        int i,j;
        int m,n;
        a[1][1]=1;
        scanf("%d%d",&n,&m);
        for(i=1;i<=n;i++){
            for(j=1;j<=m;j++){
                if(i==1&&j==1){
                    continue;
                }
                if(i%2==0&&j%2==0){  // 行为偶,列为偶 ,不符合题意,则置零 
                    a[i][j]=0;
                }else{ 
                    if(j==1){        // 处于第一列的位置,只能从上面过来 
                        a[i][j]=a[i-1][j];
                    }else if(i==1){  // 处于第一行的位置,只能从左边过来 
                        a[i][j]=a[i][j-1];
                    }else{
                        a[i][j]=a[i-1][j]+a[i][j-1]; // 处于中间的,可从上或从左边来 
                    }
                }    
            }
        } 
        printf("%d",a[n][m]);
        return 0;
    }

    运行结果:

  • 相关阅读:
    GCD HDU
    Finding Lines UVALive
    Chinese Mahjong UVA
    DNA Evolution CodeForces
    String Reconstruction (并查集)
    Number Cutting Game HDU
    Paint the Wall ZOJ
    Star sky CodeForces
    Haunted Graveyard ZOJ
    GuGuFishtion HDU
  • 原文地址:https://www.cnblogs.com/ZZG-GANGAN/p/14664405.html
Copyright © 2020-2023  润新知