第十一届蓝桥杯b组省赛第二场c++(填空部分)
发布日期:2021-05-07 16:49:02 浏览次数:13 分类:技术文章

本文共 2717 字,大约阅读时间需要 9 分钟。

A

直接拆,计数。

#include
using namespace std;int main(){ int ans=0; for(int i=2;i<=2020;i++){ int n=i; while(n){ if(n%10==2) ans++; n/=10; } } cout<

B

gcd(i,j)==1表示i和j互质,也就是题目所说的既约分数,把i当成分子,j当成分母,暴力计数即可。

#include
using namespace std;int gcd(int x,int y){ int a=max(x,y); int b=min(x,y); int temp; while(a%b){ temp=a; a=b; b=temp%b; } return b;}bool judge(int x,int y){ if(gcd(x,y)==1) return 1; return 0;} int main(){ int ans=0; for(int i=1;i<=2020;i++){ for(int j=1;j<=2020;j++){ if(judge(i,j)) ans++; } } cout<

C

蛇形填数,模拟题。

#include
using namespace std;int a[100][100];int dir[4][2]={ { -1,1},{ 0,1},{ 1,-1},{ 1,0}};bool judge(int x,int y){ if(x>=1&&y>=1) return 1; return 0;}int main(){ int cnt=1; int p=1; int i=1,j=1; a[i][j]=cnt++; while(p<=40){ //a[i][j]=cnt++; //cout<
<<" "<
<

D

我做麻烦了,反正是离线,就多造了些判断,处理二月份天数的时候比较墨迹。也是一道模拟题。

用一个变量记录天数,一个变量记录周几,然后判段更新。

#include
using namespace std;int m[13]={ 0,31,28,31,30,31,30,31,31,30,31,30,31};int ml[13]={ 0,31,29,31,30,31,30,31,31,30,31,30,31};int main(){ long long ans=0; int d=1; int mm=1; int ye=2000; int f=6; int temp=0; while(!(ye==2020&&mm==10&&d==2)){ ans++; if(d==1||f==1) ans++; d++; f++; if(f>7) f=1; if(temp){ if(d>ml[mm]){ d=1; mm++; } }else{ if(d>m[mm]){ d=1; mm++; } } if(mm>12){ mm=1; ye++; } if(ye==2000||ye==2004||ye==2008||ye==2012||ye==2016||ye==2020){ temp=1; }else{ temp=0; } //cout<
<<" "<
<<" "<
<

E

有点难受。(看了大佬的代码)

为什么要dfs,因为题目说发光的二极管是要连续的。
怎么构建连续,观察那个8,我们发现a与f,b相连,f与g,e相连,等等。
然后用数组存,会发现一个问题,即b可以到c,g也可以到c,如果直接搜怎么存合适,我们用一个#补充这个位置,代表这是一个没有字母但是可以通过的路,在搜素时可以判断一下#,然后拼接。
其它的没啥了,枚举每一个位置,然后搜素,先排序,然后用set去重一下。
在这里插入图片描述
在这里插入图片描述

#include
using namespace std;char str[8][8]={ { 'a','b','#'},{ 'f','g','c'},{ '#','e','d'}};int dir[4][2]={ { -1,0},{ 0,-1},{ 1,0},{ 0,1}};int vis[8][8];set
se;string qsort(string s){ char p[10]; memset(p,'#',sizeof(p)); int n=0; int len=s.size(); for(int i=0;i
=0&&y>=0&&x<3&&y<3&&!vis[x][y]) return 1; return 0;}void dfs(int x,int y,string t){ vis[x][y]=1; for(int i=0;i<4;i++){ int xx=x+dir[i][0]; int yy=y+dir[i][1]; if(judge(xx,yy)){ string tem=qsort(t+str[xx][yy]); se.insert(tem); vis[xx][yy]=1; dfs(xx,yy,tem); vis[xx][yy]=0; } } return ;}int main(){ for(int i=0;i<3;i++){ for(int j=0;j<3;j++){ if(str[i][j]!='#'){ string s; s+=str[i][j]; string q=qsort(s); se.insert(q); memset(vis,0,sizeof(vis)); dfs(i,j,q); } } } cout<

答案:

(1)624
(2)2481215
(3)761
(4)8879
(5)80


程序题后面再补。

上一篇:第十一届蓝桥杯b组省赛第二场c++
下一篇:蓝桥杯备战——刷题(2019)

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2025年03月21日 04时14分58秒