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

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

 

目录

一丶金币(模拟)

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

三丶穿越雷区(bfs)

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


一丶金币(模拟)

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

题目要求:

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

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

解题思路:

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

#include
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<

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

题目链接:

题目要求:

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

例如,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
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<

三丶穿越雷区(bfs)

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

题目要求:

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

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


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

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

解题思路:

一个bfs模板,bfs就行。

#include 
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()
{
    queueq;//队列 
    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<

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

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

题目要求:

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

 解题思路:

最长公共子序列 直接dp。

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

你可能感兴趣的:(31日打卡,蓝桥杯,算法,职场和发展,c++,数据结构)