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

A.门牌制作

题意:

制作从1到2020这些数字里面需要使用后多少个字符2;

思路:

for循环,并且把数字拆分,从每一位去判断。

代码:
#include<bits/stdc++.h> using namespace std; int solve(int n) { int ant=0;
while(n)//把数字拆分 { int x=n%10; if(x==2)ant++; n/=10; }return ant; } int main() {
int sum=0; for(int i=1;i<=2020;i++) { sum+=solve(i); }cout<<sum<<endl; }//答案624
B.即约分数

题意:

判断从1到2020中有多少个即约分数。

思路:

求最大公约数,gcd判断即可,符合条件就累加;

代码
#include<bits/stdc++.h> #define ll long long using namespace std; ll gcd(ll a,
ll b)//求最大公约数 { return b==0?a:gcd(b,a%b); } int main() { int sum=0; for(ll i=1;i
<=2020;i++){ for(ll j=1;j<=2020;j++){ if(gcd(i,j)==1)//判断是否符合条件 sum++;}} cout<<
sum<<endl; } //答案2481215
C.蛇形填数

题意:

按照图片的走法,最后第20行第20列的数字为多少?

思路:

因为是道填空题,本人就直接找规律求解了(相信在座各位大佬肯定可以编程写出)。1,5,13,25…d1=4,d2=8,d3=12…dn=4*n;

代码
#include<bits/stdc++.h> using namespace std; int main() { int sum,n; while(cin
>>n){ int d=1,sum=1; for(int i=1;i<n;i++) { d=4*i; sum+=d; }cout<<sum<<endl;} }
//答案761
D.跑步锻炼

题意:

从2000.01.01周六到2020.10.01周四,这些时间内,如果是月初或者周一就跑2千米,其他时间跑1千米。

代码
#include<bits/stdc++.h> using namespace std; int main() { int year=2000,month=1
,day=1,week=6,sum=0; int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; while(
year!=2020||month!=10||day!=1) { if((year%400==0)||(year%4==0&&year%100!=0))
//判断闰年 {a[2]=29;} else {a[2]=28;}day++;//天数累加 week=(week+1)%7;//weak==0代表星期天 if(
day>a[month])//判断天数是否大于当月的天数 { day=1; month++; } if(month>12)//判断是否超过12月 { month
=1; year++; } if(day==1||week==1)//判断是否符合题意条件 { sum++;//月初或者周一就多加一次 } sum++; }
cout<<sum+2<<endl;//加上第一天与最后一天 }//答案8879
F.成绩统计

题意:

输入一些成绩,成绩大于60分则为及格,大于85分则为优秀,输出及格率与优秀率(答案需要四舍五入并且保留整数与百分号)

思路:

写两个if语句判断,并且累加,最后输出及格率与优秀率时,需要加上0.5,就可以有四舍五入的效果,(需要注意的就是输出需要四舍五入)。

代码
#include<bits/stdc++.h> using namespace std; int main() { int n,x; while(cin>>n
) { float sum1=0,sum2=0; for(int i=0;i<n;i++) { cin>>x; if(x>=60)//判断及格 sum1++;
if(x>=85)//判断优秀 sum2++; } int a=float(sum1/n*100+0.5);//产生四舍五入的效果 int b=float(
sum2/n*100+0.5); cout<<a<<"%"<<endl; cout<<b<<"%"<<endl; }return 0; }
G.回文日期
题意:

输入一个日期,该日期为8位数字,需要输出下一个符合条件的回文日期与一个即为回文日期也是ABABBABA形式的回文日期。

思路:

将输入的日期进行进行自加,并且判断是否为闰年与日期是否为正确日期。判断结束后将日期进行拆分为8位数字,存入数组中,如果
a[0]==a[7]&&a[1]==a[6]&&a[2]==a[5]&&a[3]==a[4
]满足回文,在满足回文的条件下如果**a[0]==a[2]&&a[1]==a[3]&&a[0]!=a[1]**满足ABABBABA形式的回文。具体请看代码。

代码
#include<bits/stdc++.h> using namespace std; int d[13]={0,31,28,31,30,31,30,31,
31,30,31,30,31}; bool runyears(int year)//判断是否为闰年 { return year%400==0||(year%4
==0&&year%100!=0); } bool date(int year,int month,int day)//判断日期是否正确 { if(month>
12) { return false ; } if(runyears(year)&&month==2) { return day<=29; }return
day<=d[month]; } int main() { bool flag=false; int n; cin>>n; for(int i=n+1;i<
89991231;i++) { int a[8]; for(int j=7,m=i;j>=0;j--,m/=10) { a[j]=m%10;//将日期拆分 }
int year=a[0]*1000+a[1]*100+a[2]*10+a[3]; int month=a[4]*10+a[5]; int day=a[6]*
10+a[7]; if(!date(year,month,day))//如果日期不正确,则跳过 {continue; } //判断是否为回文 if(a[0]==
a[7]&&a[1]==a[6]&&a[2]==a[5]&&a[3]==a[4]) { if(flag==false) { cout<<i<<endl;
flag=true; } //判断是否为ABABBABA形式的回文 if(a[0]==a[2]&&a[1]==a[3]&&a[0]!=a[1]) { cout
<<i<<endl; break; } } }return 0; }
H.子串分值和
题意:

输入一个字符串,按顺序不断拆分为不同的子字符串,并且计算每一个子字符串中不同字母的个数,并求和输出

思路:

使用容器set去重,使用substr函数按顺序截取子字符串。具体操作请看代码。

代码
#include<bits/stdc++.h> using namespace std; int solve(string s)//容器会自动删去重复的字符
{ set<char>st; for(int i=0;i<s.size();i++) { st.insert(s[i]); }return st.size();
//去重后的字符长度 } int main() { int sum=0; string s; cin>>s; for(int i=0;i<s.size();i
++) { for(int j=i;j<s.size();j++) { string ss=s.substr(i,j-i+1);//字符截取 sum+=
solve(ss); } }cout<<sum<<endl; }
** 如果觉得博主写的还不错点个赞吧,比心!**

技术
©2019-2020 Toolsou All rights reserved,
程序员的520,送给女友的几行漂亮的代码(python版)基于stm32控制四轮小车电机驱动(一)linux查看磁盘空间命令实验四 自动化测试工具-软件测试axios拦截器封装与使用C语言——qsort函数opencv-python傅里叶变换以及逆变换在算法研究过程中如何进行算法创新nc的安装和简单操作C语言做一个简易的登陆验证(功能)界面