0
点赞
收藏
分享

微信扫一扫

蓝桥杯第十届第二场(B组c++真题解析)

莞尔小迷糊 2022-04-13 阅读 89

填空题

门牌制作

请添加图片描述

#include<bits/stdc++.h>
using namespace std;
int cnt=0;
int main(){
	for(int i=1;i<=2020;i++){
		int x=i;
		while(x){
			int t=x%10;
			if(t==2) cnt++;
			x/=10;
		}
	}
	printf("%d",cnt);
	return 0;
}
624

既约分数

请添加图片描述

#include<bits/stdc++.h>
using namespace std;
int gcd(int a,int b){
	if(b==0) return a;
	else return gcd(b,a%b);
}
int cnt;
int main(){
	for(int i=1;i<=2020;i++){
		for(int j=1;j<=2020;j++){
			//if(i==j) continue;  //感觉这个地方有些歧义,不知道2/2,3/3是不是属于分数
			if(gcd(i,j)==1) cnt++;
		}
	}
	printf("%d",cnt);
	return 0;
} 
2481215

蛇形填空

请添加图片描述

没着急直接写代码,发现规律第n行n列的数字应该是 n^2 * (n-1)^2
计算机直接算出答案,7961

跑步锻炼

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
int main(){
	int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
	int y,m,d,w;
	y=2000,m=1,d=1,w=6;
	int ans=0;
	while(1){
		if(d==1||w==1) ans+=2;
		else ans+=1;
		d++;
		w++;
		if(w==8) w=1;
		if(m==2){
			int leap=(y%400==0||y%4==0&&y%100!=0);
			if(d>month[2]+leap){
				m++;
				d=1;
			}
		}else{
			if(d>month[m]){
				m++;
				d=1;
			}
		}
		if(m==13){
			y++;
			m=1;
			d=1;
		}
		if(y==2020&&m==10&&d==1){
			printf("%d",ans+2); //第一天没有被算 
			break;
		}
	}
	return 0;
}
8879

七段码

摆烂

编程题

成绩统计

在这里插入图片描述

#include<iostream>
#include<algorithm>
using namespace std;
int cnt1,cnt2;
int main(){
	int n;
	double s1,s2;
	int sum1,sum2;
	scanf("%d",&n);
	int t=n;
	for(int i=1;i<=n;i++){
		int x;
		scanf("%d",&x);
		if(x>=60) cnt1++;
		if(x>=85) cnt2++;
	}
	s1=cnt1*1.0/t*1.0;
	s2=cnt2*1.0/t*1.0;
	s1*=100;
	s2*=100;
	sum1=round(s1);
	sum2=round(s2);
	printf("%d%% %d%%",sum1,sum2);
	return 0;
} 

回文日期

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool check(int x){
	int y=x/10000;
	int m=(x%10000)/100;
	int d=x%100;
	if(m==0||m>=13) return false;
	if(m!=2&&d>days[m]) return false;
	int leap=(y%400==0)||(y%4==0&&y%100!=0);
	if(m==2){
		if(d>days[2]+leap) return false;
	}
	return true;
}
bool check2(int x){
	string s;
	while(x){
		int t=x%10;
		x/=10;
		t+='0';
		s+=t;
	}
	reverse(s.begin(),s.end());
	//cout<<s<<endl;
	if(s[0]==s[2]&&s[2]==s[5]&&s[5]==s[7]&&s[1]==s[3]&&s[3]==s[4]&&s[4]==s[6]) return true;
	return false;
}
int main(){
	int year;
	int data1;
	int flag=0;
	scanf("%d",&year);
	for(int i=0;i<10000;i++){
		data1=i;
		int x=i;
		int data2=i;
		for(int j=0;j<4;j++){
			data1=data1*10+(x%10);
			x/=10;
		}
		if(data1>year&&check(data1)&&!flag){
			printf("%d\n",data1);
			flag=1;
		}
		if(data1>year&&check(data1)&&check2(data1)){
			printf("%d\n",data1);
			break;
		} 
	}
	return 0;
}

子串分值和

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
//菜鸡过50
string a;
typedef long long LL;
LL ans;
int main(){
	cin>>a;
	for(int i=0;i<a.size();i++){
		unordered_set<char> s;
		for(int j=i;j<a.size();j++){
			s.insert(a[j]);
			ans+=s.size();
		}
	}
	cout<<ans;
	return 0;
}
举报

相关推荐

0 条评论