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

<>有错误各位大佬指出来哈。

<>1.找"2" 答案:624
#include <iostream> #include <algorithm> using namespace std; int cnt(int num)
{ int ans=0; while(num) { if(num%10==2) ans++; num/=10; } return ans; } int main
() { int ans=0; for(int i=1;i<=2020;i++) ans+=cnt(i); cout<<ans<<endl; return 0;
}
<>2.gcd函数,直接搞 答案:2481215
#include <iostream> #include <algorithm> using namespace std; int main() { int
ans=0; for(int i=1;i<=2020;i++) { for(int j=1;j<=2020;j++) { if(__gcd(i,j)==1)
ans++; } } cout<<ans<<endl; return 0; }
<>3.蛇形图 答案:761

手算更快,等差数列搞一搞

<>4.跑步 答案:8879
#include <iostream> #include <algorithm> using namespace std; int mon[13]={0,31
,28,31,30,31,30,31,31,30,31,30,31}; int main() { int y,m,d; cin>>y>>m>>d; int
ans=0; int flag=0; int week=6; //用来记录当天星期几 //i,j,k 枚举年月日 for(int i=2000;i<=y;i++
) { for(int j=1;j<=12;j++) { int End=mon[j]; if(((i%4==0&&i%100!=0)||i%400==0)
&& j==2) End++; for(int k=1;k<=End;k++) { ans++; if(week==1||k==1) ans++; if(++
week==8) week=1; if(i==y&&j==m&&k==d) { flag=1;break; } } if(flag==1) break; } }
cout<<ans<<endl; return 0; }
<>5.灯管

这题手算的,算出来81,不知道对错……

<>6.及格率,四舍五入

不记得函数,先放大再缩小
#include <iostream> #include <algorithm> using namespace std; int n; void fun(
int &num) { if(num%10>4) { num/=10; num++; }else num/=10; } int main() { cin>>n;
int x; int cnt1=0; int cnt2=0; for(int i=0;i<n;i++) { cin>>x; if(x>=60) cnt1++;
if(x>=80) cnt2++; } int ans1=(cnt1*1.0/n*1.0)*1000; int ans2=(cnt2*1.0/n*1.0)*
1000; fun(ans1);fun(ans2); cout<<ans1<<"%"<<endl; cout<<ans2<<"%"<<endl; return
0; }
<>7.下一个回文年份

枚举年份,生成对应的月日,判断合法性
#include <iostream> #include <algorithm> #include <cstring> using namespace std
; int mon[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; char Input[10]; //通过年
得到回文的月日 同时检查年是否为abab void getMD(int y,int &m,int &d,int &ab) { int temp[4]={0};
int i=0; while(y) { temp[i++]=y%10; y/=10; } m=temp[0]*10+temp[1]; d=temp[2]*10+
temp[3]; if(temp[0]==temp[2]&&temp[1]==temp[3]) ab=1; else ab=0; } //检查年月日的合法性
bool check(int y,int m,int d) { if(((y%4==0&&y%100!=0)||y%400==0)&&m==2&&(d<1||d
>mon[2]+1)) return 0; if(m<1||m>12) return 0; if(d<1||d>mon[m]) return 0; return
1; } int main() { scanf("%s",&Input); int staY=0; int x=1; for(int i=3;i>=0;i--)
{ staY+=(Input[i]-'0')*x; x*=10; } int y1,m1,d1; int y2,m2,d2; int m,d,ab; int
flag=0; for(int i=staY+1;i<=9999;i++) { getMD(i,m,d,ab); if(check(i,m,d)) {
//找到第一次就不会再找了 if(flag==0) { y1=i; m1=m; d1=d; flag=1; } if(ab==1) { y2=i; m2=m;
d2=d; break; } } } printf("%04d%02d%02d\n",y1,m1,d1); printf("%04d%02d%02d\n",y2
,m2,d2); return 0; }
<>8.算区间不同字母的个数,求和所由子区间

直接计算每个字母的贡献值,假设每个区间都是第一个出现的字母贡献,则每个字母贡献值是左边没出现相同字母乘上右边到最后的长度
#include <iostream> #include <algorithm> #include <cstring> using namespace std
; typedef long long ll; string str; ll last[26]; //记录26个字母上一次出现的位置 ll ans=0;
int main() { for(int i=0;i<26;i++) last[i]=-1; cin>>str; ll len=str.size(); for(
ll i=0;i<len;i++) { ans+=(i-last[str[i]-'a'])*(len-i); last[str[i]-'a']=i; }
cout<<ans<<endl; return 0; }
<>9. 平面几何,这题不会,日后学会了来补

<>10.构造逆序字符串,优先最短,其次字典序最小

这题我找规律水过去了一半的数据,其实也不会写。就不贴代码献丑了

技术
©2019-2020 Toolsou All rights reserved,
uni-app中使用 async + await 实现异步请求同步化Dart中的Isolate十分钟掌握Pytorch搭建神经网络的流程利用python对monkey日志完成自动化分析二进制模2除法(CRC循环冗余检验)vue实现pc端的自适应,rem适配希尔排序Unity面试经验(两天面六家,四个offer,济南)C++实现《走迷宫》小游戏VR、AR和MR这些技术的区别