蓝桥杯真题31日冲刺国一 | 每日题解报告 第十六天

大家好,我是泡泡,今天的题目很合理,很多模板,大家多多掌握,学习一下用各种思路解题,灵活多变!

 

目录

一丶金币(模拟)

二丶优秀的拆分(位运算)

三丶穿越雷区(bfs)

四丶 蓝肽子序列(动态规划)


一丶金币(模拟)

题目链接:金币 - 蓝桥云课 (lanqiao.cn)

题目要求:

国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到三枚金币;之后四天(第七、八、九、十天),每天收到四枚金币......;这种工资发放模式会一直这样延续下去:当连续 N 天每天收到 N 枚金币后,骑士会在之后的连续 N+1 天里,每天收到 N+1 枚金币。

请计算在前 K 天里,骑士一共获得了多少金币。

解题思路:

定义一个金币数量 一个总和 每过完一个阶段金币上限+1 如果天数过了就跳出循环。

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n;
	cin>>n;
	int m = 1;
	int sum = 0;
	for(int j=1;j<=n;)
	{
		for(int i=1;i<=m;i++)
		{
			sum += m;
			j++;
			if(j>n)
			{
				break;
			}
		}
		m++;
	}
	cout<<sum;
	return 0;
} 

二丶优秀的拆分(位运算)

题目链接:

题目要求:

一般来说,一个正整数可以拆分成若干个正整数的和。

例如,1=1,10=1+2+3+4 等。对于正整数 n 的一种特定拆分,我们称它为“优秀的”,当且仅当在这种拆分下,nn 被分解为了若干个不同的 2 的正整数次幂。注意,一个数 x 能被表示成 2 的正整数次幂,当且仅当 xx 能通过正整数个 2 相乘在一起得到。

例如,10=8+2=2^3+2^1是一个优秀的拆分。但是,7=4+2+1=2^2+2^1+2^0 就不是一个优秀的拆分,因为 1 不是 2 的正整数次幂。

现在,给定正整数 n,你需要判断这个数的所有拆分中,是否存在优秀的拆分。若存在,请你给出具体的拆分方案。

解题思路:

位运算 如果这个数字该位数为1 那么就输出该位

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin >> n;
    if(n%2)
    {
    	cout<<"-1";
    	return 0;
	}
    for(int i=25;i>=0;i--)
    {
    	if(n>>i&1)
    	{
    		printf("%d ",1<<i);
		}
	}
    return 0;
}

三丶穿越雷区(bfs)

题目链接:“蓝桥杯”练习系统 (lanqiao.cn)

题目要求:

X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废。
某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能路径最短?

已知的地图是一个方阵,上面用字母标出了A,B区,其它区都标了正号或负号分别表示正负能量辐射区。


  例如:
  A + - + -
  - + - - +
  - + + + -
  + - + - +
  B + - + -

坦克车只能水平或垂直方向上移动到相邻的区。

解题思路:

一个bfs模板,bfs就行。

#include<bits/stdc++.h> 
using namespace std;
int dx[]={-1,1,0,0};
int dy[]={0,0,-1,1};
char ch[110][110];
int n,bx,by,ex,ey;
struct node{
    int x,y,step;
    char cc;
};
bool vis[110][110];
bool check(int x,int y,char c)//判断是否越界 
{
    if(!vis[x][y]&&x>0&&y>0&&x<=n&&y<=n&&ch[x][y]!=c)//没有搜过 坐标不越界  
    {
        return 1;
    }
    return 0;
}
int bfs()
{
    queue<node>q;//队列 
    q.push(node{bx,by,0,'r'});//bx by 0 r进队 
    vis[bx][by]=1;//标记这个地方被搜过了 
    while(q.size())//队列不空 
    {
        node now;//结构体变量 
        now=q.front();//now等于队列首值 
        q.pop();//弹出 
        if(now.x==ex&&now.y==ey)//如果现在的坐标和终点一样 
        {
            return now.step;//返回路径 
        }
        for(int i=0;i<4;i++)//四个方向 
        {
            int x=now.x+dx[i];
            int y=now.y+dy[i];
            if(check(x,y,now.cc))//不越界 
            {
                q.push(node{x,y,now.step+1,ch[x][y]});//压入 
                vis[x][y]=1;
            }
        }
    }
    return -1;
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            cin>>ch[i][j];//读入 
            if(ch[i][j]=='A')//定位起点 
            {
                bx=i;
                by=j;
            }
            if(ch[i][j]=='B')//定位终点 
            {
                ex=i;
                ey=j;
            }
        }
    }
    cout<<bfs();
    return 0;
}

四丶 蓝肽子序列(动态规划)

题目链接:“蓝桥杯”练习系统 (lanqiao.cn)

题目要求:

 解题思路:

最长公共子序列 直接dp。

这个题不太会,等学了补上。

蓝桥杯一个国内著名的计算机比赛,为了帮助参赛者更好地准备和了解比赛的题型,组委会会公布历年的真题并提供相应的题解。 首先,我们需要了解蓝桥杯一个综合性的计算机比赛,测试的对象包括计算机基础知识、编程能力以及解决实际问题的能力。 在历年的真题中,参赛者将面临不同类型的题目,包括算法设计与优化问题、数据结构算法问题、编程题等。其中针对Python B组的题目主要考察的是对Python语言的掌握和应用能力。 题目解答一般会包含以下几个方面的内容: 1. 题目分析与理解:读取题目,理解题目的要求和限制条件。通过仔细分析题目,确定题目的输入与输出,以及问题的核心。 2. 设计解决方案:根据题目要求和限制条件,设计一个合适的解决方案。可以使用合适的算法数据结构来解决问题,并做出相应的性能优化。 3. 编写代码实现:根据设计的方案编写相应的代码实现。需要注意的是,Python语言有其独特的语法和特性,掌握好这些特性可以更好地完编程任务。 4. 调试与测试:编写完代码后,需要进行调试和测试。通过运行样例输入和输出,检查代码是否符合题目要求,并且没有逻辑上的错误。 5. 总结与优化:在完题目解答后,可以进行总结和优化。包括分析算法复杂度、代码风格和可读性等方面,以便在比赛中更好地表现。 在准备蓝桥杯时,可以通过阅读历年的真题和题解来了解比赛的难度和类型,针对性地进行练习和提高。同时也可以参加相关的培训班和讨论活动,与其他参赛者交流经验和技巧。 总而言之,历年蓝桥杯真题的解答对于提高自己的编程能力和应对比赛非常有帮助。通过认真分析和实践,可以更好地理解并掌握Python编程,并在比赛中取得更好的绩。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cloud、泡泡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值