蓝桥杯第六届c++大学B组详解

前言:

            看了很多博客以及视频讲解,感觉都不是很清楚,比较模棱两可,所以干脆自己一边想,一边写博客,也可帮助到其他人,都是根据自己的逻辑来尽量清楚简单的讲清楚题目,喜欢的不要吝啬三连,给博主点动力。

目录

1.奖券数目

2.星系炸弹

3.三羊献瑞

4.移动距离

5.垒骰子

6.生命之树


1.奖券数目

0奖券数目 - 蓝桥云课 (lanqiao.cn)

题目解析:

                就是判断每一位是否有4,将不含4的数进行累加。

#include <iostream>
using namespace std;


bool is_four(int i)
{
    while(i > 0)
    {
      int t = i % 10;
      if(t == 4)
         return false;
      i = i / 10;
    }
    return true;
}

int main()
{
    int ret = 0;
    for(int i = 10000; i <= 99999; i++)
    {
         if(is_four(i))
         {
            ret++;
         }
    }
    cout << ret << endl;
    return 0;
}

2.星系炸弹

0星系炸弹 - 蓝桥云课 (lanqiao.cn)

题目讲解:就是实现一个日期类;

#include<iostream>
using namespace std;

class Date
{

public:
      Date(int year, int month, int day)
      : _year(year)
      ,_month(month)
      ,_day(day)
      {}

      int getmonthday(int year, int month)
      {
          int Month[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
          int day = Month[month];
          //闰年情况;
          if(month == 2 && ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)))
          {
              day++;
          }
          return day;
      }

      Date& operator+=(int day)
      {
          _day += day;
          //将day全部转化为年和月
          while(_day > getmonthday(_year, _month))
          {
              _day -= getmonthday(_year, _month);
              _month++;

              if(_month == 13)
              {
                  _year++;
                  _month = 1;
              }
          }
          return *this;
      }

      void print()
      {
         cout << _year << _month << _day << endl;
      }

private:
        int _year;
        int _month;
        int _day;
};

int main()
{
    int year, month, day, addday;
    cin >> year >> month >> day >> addday;
    Date d1(year,month,day);
    d1 += addday;
    d1.print();
    return 0;
}

3.三羊献瑞

0三羊献瑞 - 蓝桥云课 (lanqiao.cn)

题目解析:这题本质就是模拟,根据题目意思依葫芦画瓢,然后进行全排列,得到最后答案。

题目说相同的汉字就是相同的数字,不相同反之。

如果使用到algorithm库函数里面的next_permutation就会很好做,那我们看看这个接口。

本质就是一个用来全排列的接口,但是前提是数组有序。可以将排列的数用下面图表示

#include <iostream>
#include<algorithm>
using namespace std;


int main()
{
    //0-9个数字进行排列;
    int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    int sum1 = 0, sum2 = 0, sum3 = 0;
    while(next_permutation(a, a + 10))
    {
        //细节处理
        if(a[0] != 0 && a[4] != 0)
        {
           //处理算数
           sum1 = a[0] * 1000 + a[1] * 100 + a[2] * 10 + a[3];
           sum2 = a[4] * 1000 + a[5] * 100 + a[6] * 10 + a[1];
           sum3 = a[4] * 10000 + a[5] * 1000 + a[2] * 100 + a[1] * 10 + a[7];
           if(sum1 + sum2 == sum3)
           {
              cout << a[4] << a[5] << a[6] << a[1];
              break;
           }
        }
    }
    return 0;
}

4.移动距离

0移动距离 - 蓝桥云课 (lanqiao.cn)

题目解析:本质就是考数学题目,算出m号房间和n号房间之间的距离,由于这个题目是按照Z字形来安置房间的。那么就会分为奇偶排楼的不同区别。

先来看房间的行号,row = m % w

列号就要分奇偶来划分了;注意这里列是从1开始排楼的。

偶数列发现是递减序列,我们可以根据找到第一个位置的房间号(行号*w)减去要找的房间号得到列号,下标从1开始还要+1. col = rol * w - m + 1;

奇数列是递增序列,先找到最后一个房间号(行号*w)减去找的房间号的差值,再用w为房间个数 - 差值就是列号。col = w - (rol * w -m +1);

#include <iostream>
using namespace std;

int main()
{
    //先搞定输入;
    int w, m, n;
    cin >> w >> m >> n;
    int rowM = m % w == 0 ? m / w : m / w + 1;
    int rowN = n % w == 0 ? n / w : n / w + 1;
    int colM = 0, colN = 0;
    //偶数情况
    if(rowM % 2 == 0)
    {
       colM =  rowM * w - m + 1;
    }
    else
    {
       colM = w - (rowM * w - m);
    }

    if(rowN % 2 == 0)
    {
       colN =  rowN * w - n + 1;
    }
    else
    {
       colN = w - (rowN * w - n);
    }

    int sum = abs(colM - colN) + abs(rowM - rowN);
    cout << sum << endl; 
    return 0;
}

5.垒骰子

0垒骰子 - 蓝桥云课 (lanqiao.cn)

题目解析:根据题目意思,下图,我们可以创建一个数组来记录每面的对面是什么,

题目解析: 首先就要创建一个冲突数组将骰子的正面和对面的冲突记录,以及冲突面的数组.还有因为想象一下是一个魔方,那么四个面都可以进行翻转.所以还要乘以4.
第一种代码只可以通过一个用例,因为dfs进行太多层那么就要优化.
#include<iostream>
using namespace std;

const long long MOD = 1000000007;
int op[7];//记录对立面;
bool conflict[7][7];
int m, n;

void init()
{
   op[1] = 4;
   op[2] = 5;
   op[3] = 6;
   op[4] = 1;
   op[5] = 2;
   op[6] = 3;
}

long long int f(int up, int n)
{
    if(n == 0)
        return 4;
    long long int ans = 0;

    for(int uup = 1; uup <= 6; uup++)
    {
        if(conflict[op[up]][uup])
             continue;
        ans = (ans +  f(uup, n -1)) % MOD;
    }
    return ans;
}

int main()
{
   init();
   cin >> n >> m;
   for(int i = 0; i < m; i++)
   {
       int a, b;
       cin >> a >> b;
       conflict[a][b] = true;
       conflict[b][a] = true;
   }
   
   long long int  ans = 0;
   for(int up = 1; up <= 6; up++)
   {
       ans = (ans + 4 * f(up, n -1)) % MOD;
   }
   cout << ans << endl;
   return 0;
}

 使用第二种方法是动态规划.dp[i][j]表示有i层,限定朝上的数字为j的稳定方案数.

#include<iostream>
#include<map>
#include<cmath>
using namespace std;
long long dp[2][7];//dp[i][j]表示有i层,限定朝上的数字为j的稳定方案数
#define mod 1000000007
//int op[7];//记录对立面
bool  conflict[7][7];//判断是否冲突
map<int, int>op;
int n, m;
void Init()
{
	op[1] = 4;
	op[2] = 5;
	op[3] = 6;
	op[4] = 1;
	op[5] = 2;
	op[6] = 3;
}
int main()
{
	Init();
	cin >> n >> m;
	int x, y;
	long long ants = 0;
	for (int i = 0; i < m; i++)
	{
		cin >> x >> y;
		conflict[x][y] = true;
		conflict[y][x] = true;
	}
	//输入完成
	for (int j = 1; j <= 6; j++)
	{
		dp[0][j] = 1;
	}
	int cur = 0;
	//迭代层数
	for (int level = 2; level <= n; level++)
	{
		cur = 1 - cur;
		//尝试把6个面放在当前一层朝上的方向
		for (int j = 1; j <= 6; j++)
		{
			dp[cur][j] = 0;
			//将与op[j]不冲突的上一层格子里面的数累加起来
			for (int i = 1; i <= 6; i++)
			{
				if (conflict[op[j]][i])continue;//冲突的面朝上是不可取的
					dp[cur][j] = (dp[cur][j] + dp[1 - cur][i]) % mod;
			}
		}
	}
	long long sum = 0;
		for (int k = 1; k <= 6; k++)
		{
			sum = (sum + dp[cur][k] )% mod;
		}

	//快速冥求4的次方
  long long ans = pow(4, n);

	cout << (sum * ans) % mod << endl;
			return 0;
}

6.生命之树

0生命之树 - 蓝桥云课 (lanqiao.cn)

 题目解析:采用动态dp, dp[i][2]表示i结点选和不选情况下最大评分.

dp表的初始化,dp[i][1] = i 结点的权值.dp[i][0] = 0; 并且标记一下这个结点已经被使用过了.

dp[i][1] 分两个情况一个就是当前结点没有被使用过那么就是dp[i][1] = max(dp[i][0],dp[联通i结点][1]);

已经使用过,那么就是dp[i][1] = max(dp[i][1], 结点的权值); dp[i][0] = max(dp[i][0], 0);

#include <iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<cstring>
#define N 100000

int n;
vector<int> node[N];//标记结点
int vis[N];//结点标记
int a, b;
int dp[N][2];//表示i结点选和不选的最大评分.
int v[N];//权值

void init()
{

    memset(v, 0, sizeof(v));
    memset(dp, 0, sizeof(dp));

    cin >> n;
    for(int i = 1; i <= n; i++)//下标从1开始
    {
        cin >> v[i];
    }
    
    for(int i = 1; i < n; i++)
    {
        cin >> a >> b;
        //结点连通
        node[a].push_back(b);
        node[b].push_back(a);
    }
}

void dfs(int pos)
{
    //初始化.
    dp[pos][1] = v[pos];
    dp[pos][0] = 0;
    vis[pos] = 1;

    //结点连接数
    for(int i = 0; i < node[pos].size(); i++)
    {
       if(!vis[node[pos][i]])//没被使用过
       {
          //递归相邻结点.
          dfs(node[pos][i]);
          dp[pos][1] += max(dp[node[pos][i]][0], dp[node[pos][i]][1]);
       }
       else
       {
          dp[pos][1] = max(dp[pos][1], v[pos]);
          dp[pos][0] = max(dp[pos][0], 0); 
       }
    }
}

int main()
{
    init();
    dfs(1);
    
    int ans = -1;//可能有负数
    for(int i = 1; i <= n; i++)
    {
        ans = max(ans, dp[i][0]);
        ans = max(ans, dp[i][1]);
    }
    cout << ans << endl;
    return 0;
}

xdm给卑微的博主上上三联, 谢谢大家,一起进步学习!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/525710.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【JVM】GC导致的性能问题排查与解决方案,日志、堆分析工具介绍

一、必要性 重要应用程序在使用过程中&#xff0c;忽然无法响应用户请求&#xff0c;排查发现网络联通无问题&#xff0c;gateway能够正常接收分发请求&#xff0c;应用进程正常&#xff0c;正常向注册中心发送请求&#xff0c;但是接收http请求全部返回报错。 添加gc后发现内…

前端秘法番外篇----学完Web API,前端才能算真正的入门

目录 一.引言 二.元素的获取和事件 1.获取元素 2.各种事件 2.1点击事件 2.2键盘事件 三.获取&修改操作 1.获取修改元素属性 2.修改表单属性 2.1暂停播放键的转换 2.2计数器的实现 2.3全选的实现 3.样式操作 3.1行内样式操作 3.2类名样式操作 四.节点 1.创…

​最新仿抖音短视频开源版+商城+短视频

​最新仿抖音短视频开源版商城短视频 最新仿抖音短视频开源版商城短视频&#xff0c;完成度已经可以达到官方App的80%了 基于Vue、Vite 实现。使用了最新的 Vue 全家桶技术栈&#xff0c;接口数据通过 axios-mock-adapter模拟 源码截图&#xff1a; 免费下载地址&#xff…

visual studio 2017开发QT框架程序

1. 配置开发环境 首先创建项目 进入到项目后&#xff0c;右键点击项目点击属性&#xff0c;配置如下&#xff1a;

✌2024/4/4—力扣—盛最多水的容器

代码实现&#xff1a; 方法一&#xff1a;暴力解法——遍历左右边&#xff0c;找出所有面积&#xff0c;取最大值——超时 #define min(a, b) ((a) > (b) ? (b) : (a)) #define max(a, b) ((a) > (b) ? (a) : (b))int maxArea(int *height, int heightSize) {int ans …

CorelDRAW2024全网最详细独家讲解新版本新功能

各位粉丝大家好&#xff0c;为了让大家更深入的了解CorelDRAW2024新版的各项新功能&#xff0c;我们独家邀请到了Corel中国专家名师张苏老师&#xff0c;策划并录制30分钟全中文讲解栏目&#xff01;干货满满&#xff0c;全程演示&#xff0c;一览CorelDRAW2024新版的各项新功能…

基于RTThread的学习(三):正点原子潘多拉 QSPI 通信 W25Q128 实验

1、基于芯片创建工程 2、QSPI配置 2.1、RTThing_setting 设置组件 2.2、配置board.h 文件 2.3、cubemx生成QSPI的硬件初始化代码&#xff1b;HAL_QSPI_MapInit; 这里注意&#xff1a;你所买的开发板对应的qspi 连接的是否是cubemx 上边显示的&#xff0c;如果不是你需要将引脚…

1.8.3 卷积神经网络近年来在结构设计上的主要发展和变迁——GoogleNet/inception-v1

1.8.3 卷积神经网络近年来在结构设计上的主要发展和变迁——GoogleNet/ inception-v1 前情回顾&#xff1a; 1.8.1 卷积神经网络近年来在结构设计上的主要发展和变迁——AlexNet 1.8.2 卷积神经网络近年来在结构设计上的主要发展和变迁——VGGNet GoogleNet问题 在VGGNet简单堆…

windows server 2019-搭建文件共享服务器

一、共享服务器概述 通过网络提供文件共享服务、提供文件下载和上传服务&#xff08;类似FTP服务器&#xff09; 文件共享使用的是CIFS协议&#xff08;微软开发&#xff0c;微软全系服务器都自带此服务&#xff09; FTP服务器对外&#xff08;给客户&#xff09; 文件共享…

人力资源管理系统大揭秘!推荐企业选型攻略

在现代化企业管理中&#xff0c;人力资源管理系统的引入犹如为企业注入了智能血脉&#xff0c;极大地提升了人力资源管理的效率和质量。本文将聚焦以下几款人力资源管理系统&#xff1a;ZohoPeople、宏景云平台、红海云、SAP SuccessFactors、ADP Workforce Now&#xff0c;为您…

视频上传-实现断点续传

视频上传 单纯的视频上传好办 前端传一个大文件的流 后端按照 MultipartFile 接受 然后读数据。 但是问题是视频这种大文件 它一般不会短时间传完&#xff0c; 这中间如果 前端用户的网络不好断了 那么你这个大文件就要重新传 等于前面传的都白费了 所以大文件上传/下载都有…

python导入redis库错误的解决方法

python连接redis&#xff0c;很多推荐使用【redis】库&#xff0c; 但是我的IDE一直报错&#xff0c;我分别尝试python3.12和python3.8版本&#xff0c;都不行。错误如下图 解决办法就是 换个库。 换成【redis2】&#xff0c;之前写的代码配置啊什么的不需要改&#xff0c;很方…

【开发环境搭建篇】PyCharm安装

本文收录于 《Python编程入门》专栏&#xff0c;从零基础开始&#xff0c;介绍Python编程入门相关的内容&#xff0c;欢迎关注&#xff0c;谢谢&#xff01; 文章目录 一、前言二、下载三、安装四、创建新项目五、安装模块六、总结 一、前言 本文介绍如何在Windows环境下安装P…

更新!谷歌倾斜摄影转换生成OSGB瓦片V0.2版

半个月前发表了一篇文章(首发&#xff01;谷歌倾斜摄影转换生成OSGB格式),首次将谷歌原始倾斜摄影瓦片转成OSGB瓦片&#xff0c;有读者对文章里的内容有诸多疑问&#xff0c;可能我在文章中描述的不够清楚&#xff0c;这里再解释一下。 1.谷歌倾斜摄影3DTiles瓦片生成方案 之…

同样是测痛仪有什么不一样?大小鼠足底光热刺痛仪VS大小鼠鼠尾测痛仪

简单介绍&#xff1a; ZL-024E大小鼠足底光热刺痛仪是应用在痛觉生理学、药理学等痛觉研究的仪器。可自动测定大/小鼠在自由状态下足底光热刺激痛阈时间&#xff0c;操作简便&#xff0c;并且可自动得出测定结果&#xff0c;是用于药理实验中研究镇痛**的理想实验仪器。 详情…

Vue - 你知道Vue中computed和watch的区别吗

难度级别:中高级及以上 提问概率:70% 二者都是用来监听数据变化的,而且在日常工作中大部分时候都只是局限于简单实用,所以到了面试中很难全面说出二者的区别。接下来我们看一下,二者究竟有哪些区别呢? 先说computed,它的主要用途是监听…

【扩散模型】论文精读:VLOGGER: Multimodal Diffusion for Embodied Avatar Synthesis

广告位&#xff1a; 图像拼接论文精读专栏 —— 图像拼接领域论文全覆盖&#xff08;包含数据集&#xff09;&#xff0c;省时省力读论文&#xff0c;带你理解晦涩难懂的论文算法&#xff0c;学习零散的知识和数学原理&#xff0c;并学会写图像拼接领域的论文&#xff08;介绍…

篮球竞赛|基于Springboot的篮球竞赛预约平台系统设计与实现(源码+数据库+文档)

篮球竞赛预约平台目录 基于Springboot的篮球竞赛预约平台系统设计与实现 一、前言 二、系统设计 三、系统功能设计 1、前台&#xff1a; 2、后台 管理员功能 用户功能 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff…

国珏甄选APP 多方合作 满足进出口跨境贸易需求

顺应互联网技术和全球化趋势的双重推动&#xff0c;国珏甄选APP应运而生&#xff0c;以创新模式颠覆了传统的进出口贸易方式&#xff0c;提供了一个崭新的综合型电商解决方案。国珏甄选APP&#xff0c;全称为国珏展翔科技&#xff08;成都&#xff09;有限公司&#xff0c;是一…

CentOS8 64位系统 搭建内网穿透frp

搭建 1、查看系统信息: cat /etc/reahat-realse uname -a 如果存在x86_64说明是64位系统 2、下载frp软件 wget https://github.com/fatedier/frp/releases/download/v0.56.0/frp_0.56.0_linux_amd64.tar.gz #Linux 32位系统 wget https://github.com/fatedier/frp/releases/d…