2020第十一届蓝桥杯大赛软件类省赛第二场C++ C组真题题解

==============================
2019-2021蓝桥杯C++ C组真题题解:
2019第十届蓝桥杯大赛软件类省赛C++ C组真题题解
2020第十一届蓝桥杯大赛软件类省赛第二场C++ C组真题题解
2021第十二届蓝桥杯大赛软件赛省赛C++ C组真题题解

==============================

目录

  • 试题A:约数个数(5分)
  • 试题B:门牌制作(5分)
  • 试题C:跑步锻炼(10分)
  • 试题D:平面分割(10分)
  • 试题E:蛇形填数(15分)
  • 试题F:成绩统计(15分)
  • 试题G:单词分析(20分)
  • 试题H:数字三角形(20分)
  • 试题I:作物杂交(25分)
  • 试题J:子串分值和(25分)

试题A:约数个数(5分)

2020第十一届蓝桥杯大赛软件类省赛第二场C++ C组真题题解_第1张图片

题目分析:
枚举
题目代码:

#include 
using namespace std;
int main()
{
	int tot=0;
	for(int i=1;i<=78120;i++)
	{
		if(78120%i==0)tot++;
	}
	cout<<tot<<endl;
	return 0;
}

题目答案:

96

试题B:门牌制作(5分)

2020第十一届蓝桥杯大赛软件类省赛第二场C++ C组真题题解_第2张图片

题目分析:
这道题直接暴力求解就行了
题目代码:

#include 
using namespace std;
long long res=0;
void cal(int n)
{
	while(n!=0)
	{
		if(n%10==2)res++;
		n/=10;
	}
}
int main()
{
	for(int i=1;i<=2020;i++)
	{
		cal(i);
	}
	cout<<res<<endl;
	return 0;
}

题目答案:

624

试题C:跑步锻炼(10分)

2020第十一届蓝桥杯大赛软件类省赛第二场C++ C组真题题解_第3张图片

题目分析:
枚举从开始到结束的每一天,注意下面即可
1.检查是否是闰年
2.检查是否是星期一
3.检查是否是开始月初
题目代码:

#include 
using namespace std;
int months[]={31,28,31,30,31,30,31,31,30,31,30,31};
bool isrun(int a)//是否是闰年
{
	return (a%4==0&&a%100!=0)||(a%400==0);
}
int main()
{
	int day=5;//因为第一天是星期六,所以前一天是星期五
	long long res=0;
	for(int year=2000;year<2020;year++)//枚举年份
	{
		for(int month=0;month<12;month++)//枚举每月
		{
			int monthnum=months[month];
			if(isrun(year)&&month==1)monthnum=29;//如果是闰年则二月是29天
			for(int i=0;i<monthnum;i++)//枚举每一天
			{
				day++;
				day=day%7;
				if(day==1||i==0)res+=2;//如果是月初或者是星期一
				else res+=1;
			}
		}
	}
	for(int month=0;month<9;month++)//枚举2020年 到10月1号
	{
		int monthnum=months[month];
		if(month==1)monthnum=29;
		for(int i=0;i<monthnum;i++)
		{
			day++;
			day=day%7;
			if(day==1||i==0)res+=2;
			else res+=1;
		}
	}
	res+=2;
	day++;
	cout<<res<<endl;
	cout<<day<<endl;
	return 0;
}


题目答案:

8879

试题D:平面分割(10分)

2020第十一届蓝桥杯大赛软件类省赛第二场C++ C组真题题解_第4张图片
题目分析:
不会,只能去寻找大佬的博客
第十一届蓝桥杯A组省赛平面分割
题目代码:
题目答案:

1391

试题E:蛇形填数(15分)

2020第十一届蓝桥杯大赛软件类省赛第二场C++ C组真题题解_第5张图片

题目分析:
从图中我们可以知道
我们将斜着的作为一排,第n排坐标之和为n+1,第i排的数字个数为i
所以20行20列坐标之和为40,则是第39排,前面数字是1加到38然后再加20即可
2020第十一届蓝桥杯大赛软件类省赛第二场C++ C组真题题解_第6张图片

题目代码:

#include 
using namespace std;
int main()
{
	int res=0;
	for(int i=1;i<=38;i++)res+=i;
	cout<<res+20<<endl;
	return 0;
}

题目答案:

761

试题F:成绩统计(15分)

2020第十一届蓝桥杯大赛软件类省赛第二场C++ C组真题题解_第7张图片
2020第十一届蓝桥杯大赛软件类省赛第二场C++ C组真题题解_第8张图片

题目分析:
难点:最后一位要进行四舍五入,因为int是直接把最后一位抹掉
方法:因为计算时会变成小数,但是答案百分位是两位数,所以要多乘100。
我们可以再多乘一位,观察最后一位(也就是舍弃的那位)如果大于等于5则将舍弃前一位加1
题目代码:

#include 
using namespace std;
int main()
{
	int n,score;
	cin>>n;
	int p_jige=0,p_you=0;
	for(int i=0;i<n;i++)
	{
		cin>>score;
		if(score>=85)p_you++;
		if(score>=60)p_jige++;
	}
	int f_jige=(p_jige*1.0/n)*1000;//多乘一位 方便四舍五入
	int f_you=(p_you*1.0/n)*1000;
	if(f_jige%10>=5)f_jige+=10;//如果最后一位大于等于五 则加1
	if(f_you%10>=5)f_you+=10;
	cout<<f_jige/10<<"%"<<endl;//将最后一位舍掉
	cout<<f_you/10<<"%"<<endl;
}

试题G:单词分析(20分)

2020第十一届蓝桥杯大赛软件类省赛第二场C++ C组真题题解_第9张图片
2020第十一届蓝桥杯大赛软件类省赛第二场C++ C组真题题解_第10张图片

题目分析:
我们可以用数组保存字母出现的个数
char类型其实也是int类型(1+‘a’=‘b’)
题目代码:

#include 
using namespace std;
int word[26];//保存每个字母出现个数
int main()
{
	string s;
	cin>>s;
	for(int i=0;i<s.size();i++)
	{
		word[s[i]-'a']++;
	}
	char res=' ';
	int n=0;
	for(int i=0;i<26;i++)//查找最大的字母及其个数
	{
		if(word[i]>n)
		{
			n=word[i];
			res='a'+i;
		}
	}
	cout<<res<<endl;
	cout<<n<<endl;
	return 0;
}

试题H:数字三角形(20分)

2020第十一届蓝桥杯大赛软件类省赛第二场C++ C组真题题解_第11张图片
2020第十一届蓝桥杯大赛软件类省赛第二场C++ C组真题题解_第12张图片
题目分析:
这道题是根据数字三角形改编的,但是加了一个条件向左下走和右下走的次数相差不为1,这代表走到的终点只能为中间的数(如果是奇数则是中间的一个,如果是偶数则是中间的两个)
则在没有限制的基础上,加上限制即可
2020第十一届蓝桥杯大赛软件类省赛第二场C++ C组真题题解_第13张图片

题目代码:

#include 
using namespace std;
int num[105][105];
int dp[105];
int main()
{
	int N;
	cin>>N;
	for(int i=1;i<=N;i++)
	{
		for(int j=1;j<=i;j++)
		{
			cin>>num[i][j];
		}
	}
	if(N%2==0)
	{
		dp[N/2]=num[N][N/2];
		dp[N/2+1]=num[N][N/2+1];	
	}else{
		dp[N/2+1]=num[N][N/2+1];
	}
	for(int i=N-1;i>=1;i--)
	{
		for(int j=1;j<=i;j++)
		{
			if(dp[j]==0&&dp[j+1]==0)continue;
			dp[j]=max(dp[j],dp[j+1])+num[i][j];
		}
	}
	cout<<dp[1]<<endl;
	return 0;
}

试题I:作物杂交(25分)

2020第十一届蓝桥杯大赛软件类省赛第二场C++ C组真题题解_第14张图片
2020第十一届蓝桥杯大赛软件类省赛第二场C++ C组真题题解_第15张图片

题目分析:
题目代码:
题目答案:

试题J:子串分值和(25分)

2020第十一届蓝桥杯大赛软件类省赛第二场C++ C组真题题解_第16张图片
2020第十一届蓝桥杯大赛软件类省赛第二场C++ C组真题题解_第17张图片

题目分析:
具体分析我单独写了一个博客
https://blog.csdn.net/qq_46470984/article/details/123652295?spm=1001.2014.3001.5501
题目代码:

#include 
using namespace std;
int pre[26];
int main()
{
    string s;
    cin>>s;
    long long total=0;
    memset(pre,-1,sizeof(pre)); 
    for(int i=0;i<s.size();i++)
    {
    	total+=(i-pre[s[i]-'a'])*(s.size()-i);
    	pre[s[i]-'a']=i;
	}
    cout<<total;
  return 0;
}

你可能感兴趣的:(蓝桥杯,c++,算法,蓝桥杯)