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; }
运行结果: