2023十四届蓝桥杯C++A组真题

蓝桥杯B组30多分进国赛了,觉得有的玩,再刷一刷算法把

B组的题目笔记

(16条消息) 蓝桥杯2023年第十四届c++B组省赛真题_尘_客的博客-CSDN博客

编程题目链接放下边,就不放题干了

2023年第十四届蓝桥杯大赛软件类省赛C/C++大学A组真题 - 题库 - C语言网 (dotcpp.com)

幸运数

暴力的选择题运行时候让他运行就行了,等几分钟都行

答案 4430091

#include
using namespace std;
const int MAX=1e5+10;
int dp[5005][5005];
int main()
{
	int res=0;
	for(int k=1;k<=100000000;k++)
	{
		int num=k;
		vectortemp;
		while(num)
		{
			temp.push_back(num%10);
			num/=10;
		}
		if(temp.size()%2==0)
		{
			long long sum=0;
			for(int i=0;i

有奖问答

8335366

 深搜

#include
using namespace std;
const int MAX=1e5+10;
int cnt;
void dfs(int i,int score)
{//做到第i题
    if(score==70)cnt++;
	if(i>=30)return ; 
	if(score>=100)return ;
	
	dfs(i+1,score+10);//此题正确 
	dfs(i+1,0);//此题错误 
}
int dp[50][150];
int main()
{
	dfs(0,0);
	cout<

下面这段dp不对,答案差1,看出错误的朋友d一下 


#include
using namespace std;
const int MAX=1e5+10;
int dp[50][150];
int main()
{
	/*dp[i][j]为做了[0,i]这几道题分数为j的数目
	dp[i][j]=dp[i-1][j-10]+dp[i-1][0]
	*/
	int ans=0;
	for(int i=0;i<10;i++)dp[i][0]=1;
	for(int i=1;i<30;++i)
	{
		for(int j=0;j<100;j+=10)
		{
			if(j>=10)
			dp[i][j]+=dp[i-1][j-10];	
			dp[i][0]+=dp[i-1][j];
		}
		ans+=dp[i][70];
	}
	for(int i=0;i<30;i++)
	{
		for(int j=0;j<=100;j+=10)
		cout<

正确的 

#include
using namespace std;
typedef long long ll;
ll dp[31][101],ans;
int main(){
	dp[0][0]=1;
	for(int i=0;i<30;++i){
		for(int j=0;j<100;j+=10){
			if(!dp[i][j])continue;
			if(j<90)dp[i+1][j+10]+=dp[i][j];
			dp[i+1][0]+=dp[i][j];
		}
		ans+=dp[i+1][70];
	}
	printf("%lld\n",ans);
		for(int i=0;i<30;i++)
	{
		for(int j=0;j<=100;j+=10)
		cout<

平方差

找规律:奇数或四的倍数都可以 

学到一个找区间内k的倍数个数[l,r]

k倍数

个数=r/k - (l-1)/k;

#include
using namespace std;
const int MAX=1e5+10;

int main()
{
	//找规律:奇数或四的倍数都可以 
	int l,r;
	cin>>l>>r;
	/*找l->R奇数+4的倍数 
	ans=(r-l+1)- (偶数个数-4的倍数个数)
	偶数个数 =r/2    -(l-1)/2 
			1->r偶数 - 1->l偶数 (别减去左边界l,所以是l-1) 
	4的倍数个数=r/4 -(l-1)/4 
	*/
	cout<<(r-l+1)-(r/2-(l-1)/2)+(r/4-(l-1)/4);
	
	/*
	for(int k=l;k<=r;k++)
	{//O(n)遍历  不能AC 
		if(k%2||k%4==0)res++;
	}
	*/

    return 0;
}

更小的数

上dp,和力口这个题很想

那么此时此刻——恰如彼时彼刻——竟能如此相像—— 像!

647. 回文子串 - 力扣(Leetcode)

   dp[i][j]是判断翻转[i,j]是否符合条件
    递推公式 
    if(s[i]>s[j])dp[i][j]=1  (6xxx1)开头就能判断
    else if(s[i]     else dp[i][j]=dp[i+1][j-1]  开头相等由内部决定 

#include
using namespace std;
const int MAX=1e5+10;
int dp[5005][5005];
int main()
{
	string s;
	cin>>s;
	int n=s.size();	
	/*dp[i][j]是判断翻转[i,j]是否符合条件
	递推公式 
	if(s[i]>s[j])dp[i][j]=1  (6xxx1)开头就能判断
	else if(s[i]=0;i--)
	{//由递推公式决定的递推顺序 
		for(int j=i+1;js[j])dp[i][j]=1 ;
			else if(s[i]

后面题还不适合我这个蒻季做,参考大佬的

(44条消息) 2023第十四届蓝桥杯 C/C++大学生A组省赛 满分题解_Code92007的博客-CSDN博客

你可能感兴趣的:(蓝桥杯,算法,c++,数据结构,leetcode)