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

news2024/11/27 2:20:48

前言:

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

目录

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给卑微的博主上上三联, 谢谢大家,一起进步学习!!!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RequestMapping注解

一、RequestMapping的作用 RequestMapping 注解是 Spring MVC 框架中的一个控制器映射注解&#xff0c;用于将请求映射到相应的处理方法上。具体来说&#xff0c;它可以将指定 URL 的请求绑定到一个特定的方法或类上&#xff0c;从而实现对请求的处理和响应。 二、RequestMappi…

互联网需要做安全防护吗?

互联网需要做安全防护&#xff0c;因为网络攻击的风险随时存在。一旦遭受大规模攻击&#xff0c;企业很可能会受到严重影响&#xff0c;甚至会造成巨大的经济损失和品牌声誉受损。因此&#xff0c;建议企业在安全防护方面做好以下几点&#xff1a; 加强网络安全意识教育&#x…

linux基础篇:Linux中磁盘的管理(分区、格式化、挂载)

Linux中磁盘的管理&#xff08;分区、格式化、挂载&#xff09; 一、认识磁盘 1.1 什么是磁盘 磁盘是一种计算机的外部存储器设备&#xff0c;由一个或多个覆盖有磁性材料的铝制或玻璃制的碟片组成&#xff0c;用来存储用户的信息&#xff0c;这种信息可以反复地被读取和改写…

python WAV音频文件处理—— (2)处理PCM音频-- waveio包

破译 PCM-Encoded 的音频样本 这部分将变得稍微高级一些&#xff0c;但从长远来看&#xff0c;它将使在 Python 中处理 WAV 文件变得更加容易。 在本教程结束时&#xff0c;我们将构建出 waveio 包&#xff1a; waveio/ │ ├── __init__.py ├── encoding.py ├── met…

在git上先新建仓库-把本地文件提交远程

一.在git新建远程项目库 1.选择新建仓库 以下以gitee为例 2.输入仓库名称&#xff0c;点击创建 这个可以选择仓库私有化还公开权限 3.获取仓库clone链接 这里选择https模式就行&#xff0c;就不需要配置对电脑进行sshkey配置了。只是需要每次提交输入账号密码 二、远…

解决网站“不安全”、“不受信”、“排名下降”,你需要——「SSL证书」

在网络时代&#xff0c;确保网站用户数据安全显得愈发关键。SSL证书作为网络安全的关键要素&#xff0c;对网站而言具有重大意义。 SSL&#xff08;Secure Sockets Layer&#xff09;证书是一种数字证书&#xff0c;用于加密和验证网络通信。它存在于客户端&#xff08;浏览…

【小白学机器学习12】假设检验之3:t 检验 (t检验量,t分布,查t值表等)

目录 1 t 检验的定义 1.1 来自维基百科和百度百科 1.2 别名 1.3 和其他检验的区别 2 适用情况&#xff1a; 2.1 关于样本情况 2.2 适合检查的情况 2.2.1 单样本均值检验&#xff08;One-sample t-test&#xff09; 2.2.2 两独立样本均值检验&#xff08;Independent …

【随笔】Git 高级篇 -- 提交的技巧(上) rebase commit --amend(十八)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…

鸿蒙南向开发:【智能烟感】

样例简介 智能烟感系统通过实时监测环境中烟雾浓度&#xff0c;当烟雾浓度超标时&#xff0c;及时向用户发出警报。在连接网络后&#xff0c;配合数字管家应用&#xff0c;用户可以远程配置智能烟感系统的报警阈值&#xff0c;远程接收智能烟感系统报警信息。实现对危险及时报…

python 如何生成uuid

UUID&#xff08;Universally Unique Identifier&#xff09;是通用唯一识别码&#xff0c;在许多领域用作标识&#xff0c;比如我们常用的数据库也可以用它来作为主键&#xff0c;原理上它是可以对任何东西进行唯一的编码的。作为新手一看到类似varchar(40)这样的主键就觉得有…

ctf刷题记录2(更新中)

因为csdn上内容过多编辑的时候会很卡&#xff0c;因此重开一篇&#xff0c;继续刷题之旅。 NewStarCTF 2023 WEEK3 Include &#x1f350; <?phperror_reporting(0);if(isset($_GET[file])) {$file $_GET[file];if(preg_match(/flag|log|session|filter|input|data/i, $…

笔记 | 编译原理L1

重点关注过程式程序设计语言编译程序的构造原理和技术 1 程序设计语言 1.1 依据不同范型 过程式(Procedural programming languages–imperative)函数式(Functional programming languages–declarative)逻辑式(Logical programming languages–declarative)对象式(Object-or…

解决游戏霍格沃兹找不到EMP.dll问题的5种方法

在玩《霍格沃兹》游戏时&#xff0c;我们可能会遇到一些错误提示&#xff0c;其中之一就是“缺少dll文件”。其中&#xff0c;EMP.dll文件丢失是一个常见的问题。这个问题可能会导致游戏无法正常运行或出现各种错误。为了解决这个问题&#xff0c;本文将介绍5种解决方法&#x…

【线段树】【前缀和】:1687从仓库到码头运输箱子

本题简单解法 C前缀和算法的应用&#xff1a;1687从仓库到码头运输箱子 本文涉及的基础知识点 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 线段树 LeetCode1687从仓库到码头运输箱子 你有一辆货运卡车&#xff0c;你需要用这一辆车…

paddle实现手写数字模型(一)

参考文档&#xff1a;paddle官网文档环境&#xff1a;Python 3.12.2 &#xff0c;pip 24.0 &#xff0c;paddlepaddle 2.6.0 python -m pip install paddlepaddle2.6.0 -i https://pypi.tuna.tsinghua.edu.cn/simple调试代码如下&#xff1a; LeNet.py import paddle import p…

初学python记录:力扣1600. 王位继承顺序

题目&#xff1a; 一个王国里住着国王、他的孩子们、他的孙子们等等。每一个时间点&#xff0c;这个家庭里有人出生也有人死亡。 这个王国有一个明确规定的王位继承顺序&#xff0c;第一继承人总是国王自己。我们定义递归函数 Successor(x, curOrder) &#xff0c;给定一个人…

数据结构——二叉树——二叉搜索树(Binary Search Tree, BST)

目录 一、98. 验证二叉搜索树 二、96. 不同的二叉搜索树 三、538. 把二叉搜索树转换为累加树 二叉搜索树&#xff1a;对于二叉搜索树中的每个结点&#xff0c;其左子结点的值小于该结点的值&#xff0c;而右子结点的值大于该结点的值 一、98. 验证二叉搜索树 给你一个二叉树的…

GAMES Webinar 317-渲染专题-图形学 vs. 视觉大模型|Talk+Panel形式

两条路线&#xff1a;传统渲染路线&#xff0c;生成路线 两种路线的目的都是最终生成图片或者视频等在现在生成大火的情况下&#xff0c;传统路线未来该如何发展呢&#xff0c;两种路线是否能够兼容呢 严令琪 这篇工作是吸取这两条路各自优势的一篇工作 RGB是一张图&#xff…

好用的AI智能工具:AI写作、AI绘画、AI翻译全都有

在科技不断进步的今天&#xff0c;人工智能&#xff08;AI&#xff09;已经成为我们日常生活中不可或缺的一部分。它不仅在各个领域都有应用&#xff0c;还为我们提供了许多方便快捷的工具。对此&#xff0c;小编今天推荐7款人工智能软件&#xff0c;AI写作、AI绘画、AI翻译全都…

Vue - 你知道Vue组件之间是如何进行数据传递的吗

难度级别:中级及以上 提问概率:85% 这道题还可以理解为Vue组件之间的数据是如何进行共享的,也可以理解为组件之间是如何通信的,很多人叫法不同,但都是说的同一个意思。我们知道,在Vue单页面应用项目中,所有的组件都是被嵌套在App.vue内…