第十一届蓝桥杯题解
门牌制作
暴力枚举即可
#include<bits/stdc++.h>
using namespace std;
int main(){
int num=0;
for(int i=1;i<=2020;i++){
int j=i;
while(j){
if(j%10==2) num++;
j/=10;
}
}
cout<<num<<endl;
}
既约分数
暴力枚举即可
#include<bits/stdc++.h>
using namespace std;
int gcd(int x,int y){
if(y==0) return x;
else return gcd(y,x%y);
}
bool judge(int x,int y){
if(gcd(x,y)==1) return true;
return false;
}
int main(){
int sum=0;
for(int i=1;i<=2020;i++){
for(int j=1;j<=2020;j++){
if(judge(i,j)){
sum++;
}
}
}
cout<<sum<<endl;
}
蛇形填数
找规律
#include<bits/stdc++.h>
using namespace std;
int a[30];
int main(){
a[1]=1;
for(int i=2;i<=20;i++){
a[i]=a[i-1]+(i-1)*4;
}
cout<<a[20];
}
七段码
一道深搜的题
#include<bits/stdc++.h>
using namespace std;
int ans=0;
int maps[10][10];
int fa[10];
int vis[10];
int find(int i){
if(fa[i]==i) return i;
return fa[i]=find(fa[i]);
}
void dfs(int k){
if(k>7){
for(int i=1;i<=7;i++){
fa[i]=i;
}
for(int i=1;i<=7;i++){
for(int j=1;j<=7;j++){
if(maps[i][j]&&vis[i]&&vis[j]){
int fx=find(i);
int fy=find(j);
if(fx!=fy){
fa[fx]=fy;
}
}
}
}
int cnt=0;
for(int i=1;i<=7;i++){
if(fa[i]==i&&vis[i]){
cnt++;
}
}
if(cnt==1) ans++;
return;
}
vis[k]=1;
dfs(k+1);
vis[k]=0;
dfs(k+1);
}
int main(){
maps[1][2]=maps[2][1]=1;maps[1][6]=maps[6][1]=1; //连通的存图
maps[6][7]=maps[7][6]=1;maps[6][5]=maps[5][6]=1;
maps[2][7]=maps[7][2]=1;maps[2][3]=maps[3][2]=1;
maps[5][7]=maps[7][5]=1;maps[5][4]=maps[4][5]=1;
maps[3][7]=maps[7][3]=1;maps[4][3]=maps[3][4]=1;
dfs(1);
cout<<ans;
}
成绩分析
简单查找一下就可以了
#include<bits/stdc++.h>
using namespace std;
int a[100];
int main(){
int n;
cin>>n;
double sum=0;
int maxn=0;
int minn=100000;
for(int i=0;i<n;i++){
cin>>a[i];
sum+=a[i];
if(maxn<a[i]) maxn=a[i];
if(minn>a[i]) minn=a[i];
}
cout<<maxn<<endl;
cout<<minn<<endl;
cout<<fixed;
cout<<setprecision(2);
cout<<sum/n<<endl;
}
回文日期
自己造回文子串,然后验证,枚举会超时
#include<bits/stdc++.h>
using namespace std;
int m[12]={31,28,31,30,31,30,31,31,30,31,30,31};
bool judge(int x){
int year=x/10000;
int month=x%10000/100;
int day=x%100;
if(month>12||month<0) return false;
if(day==0||(month!=2&&day>m[month-1])){
return false;
}
if(month==2){
int len=m[month-1];
if(year%400==0||(year%100!=0&&year%4==0)){
len=len+1;
}
if(day>len) return false;
return true;
}
}
int main(){
int n;
cin>>n;
int year=n/10000;
for(int i=year;i;i++){
int m=i;
int x=i;
for(int i=0;i<4;i++){
x=x*10+m%10;
m/=10;
}
if(x>n&&judge(x)){
cout<<x<<endl;
break;
}
}
for(int i=year;i;i++){
int len=i/100;
int sum=0;
sum=len*100+len;
int sum1=sum;
for(int j=0;j<4;j++){
sum1=sum1*10+sum%10;
sum/=10;
}
if(sum1>n&&judge(sum1)){
cout<<sum1<<endl;
break;
}
}
}