【无标题】蓝桥杯软件赛Java研究生组/A组)第二章基础算法-第四节:构造

本文主要是介绍【无标题】蓝桥杯软件赛Java研究生组/A组)第二章基础算法-第四节:构造,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • 构造类这种题目,比较开放、而且往往需要一些其他知识,往往就是读的时候感觉很麻烦抽象,但是看到答案后,又感觉非常简单
  • 这种题目没有必要死磕,有时间看看就行,总结总结

文章目录

  • 一:什么是构造
    • (1)概述
    • (2)常见的构造题目类型
  • 二:典型题目
    • (1)题目一
    • (2)题目二
    • (3)题目三
    • (4)题目四
    • (5)题目五

一:什么是构造

(1)概述

构造:构造题在比赛和解决问题的过程中确实是常见的一类题型。它们通常要求解题者通过观察问题的结构和规律,找到一种通用的方法或模式,使得在问题规模增大时,依然能够高效地得到答案。考虑以下几点

  • 观察问题规模的增长:了解问题随着规模的增大,答案的变化趋势。这可以帮助你找到一种通用的解决方案
  • 推广规律:试将你观察到的规律推广到更大的问题规模上。这可能涉及到数学归纳法或者其他类似的思考方式
  • 考虑状态转移(适用于动态规划等问题):如果问题可以通过状态转移来求解,那么要仔细考虑从一个状态到另一个状态的转移会带来什么影响
  • 模式识别:尝试寻找问题中的模式或者特征,这有助于你更好地理解问题的本质
  • 实践和练习:通过解决大量的构造题,你会逐渐培养出发现规律和应用通用方法的能力
  • 注意特殊情况:一些构造题在特定的情况下可能会有不同的解法或者规律,要注意考虑这些特殊情况

构造类问题有如下特点

  • 高自由度:一道题的构造方式可能存在多种,但往往会有一种相对简单且能够满足题意的构造方式。这种特性看似降低了难度,使问题更易理解,但实际上,这种高自由度往往会导致考生在面对题目时感到迷茫,难以找到明确的解题思路
  • 灵活和多样性:并不存在一个通用解法或套路适用于所有构造题,甚至很难找出解题思路的共性。这意味着解决构造题需要考生具备灵活的思维,善于观察和归纳,以便在面对各种不同形式的题目时能够找到切入点和解题方法

这里有一些解题建议

  • 仔细分析题目要求和条件
    • 仔细阅读题目,确保你理解了题目的要求和所给的条件
    • 弄清楚问题的背景和目标,明确你需要构造的内容或解决的问题
  • 尝试特例和极端情况
    • 试图找出一些特殊情况下的解法,这可以帮助你更好地理解问题的本质
    • 探索极端情况,看看在极端条件下是否会出现特殊的构造方式或者规律
  • 寻找模式和规律
    • 观察题目中是否存在一些明显的模式或者规律,这可能是解决问题的关键
    • 尝试从已知的情况中找到一般性的解法,并推广到更一般的情况
  • 尝试逆向构造:从问题的反面思考也可以给出有用的线索。尝试反向推导出符合条件的情况
  • 使用数学归纳法:尝试使用数学归纳法证明某种构造方式在所有情况下都成立
  • 灵活应用已有知识:将已学的数学、物理、逻辑等知识灵活应用,可能会为你找到新的解法
  • 反复实践和总结:多做类似的题目,总结解题经验,找出有效的解题方法,虽然不存在通解,但是部分构造题可能会用到相似的套路,如果能够有做题的广度并且经常总结,那么对于你解决构造题目是非常有帮助的
  • 保持信心和耐心:构造题可能需要时间和多次尝试才能找到合适的解法,保持耐心和信心是很重要的

(2)常见的构造题目类型

构造题目很难找到一个准确的形式化定义,也没有一个通用的解题方法。因此,这里介绍一下常见的构造题型

  • 数学问题
    • 构造满足一定条件的数列、集合或排列组合
    • 利用数学关系构造出特定的解
  • 图论问题
    • 构造特定的图结构,如树、图、有向图等
    • 根据题意构造出满足条件的图
  • 字符串处理
    • 构造满足字符串性质的解,如回文串、循环字符串等
    • 构造满足特定字符串操作的解
  • 组合与排列
    • 构造出满足一定条件的排列或组合
    • 根据条件构造特定的排列组合解
  • 游戏策略:设计游戏规则,构造出有趣的游戏场景,考验选手的策略思维
  • 逻辑推理:构造逻辑谜题或者推理题,要求选手根据题目信息进行推理,得出正确答案
  • 数据结构:构造特定的数据结构,如堆、树、图等,要求选手在构造的基础上进行一系列操作
  • 动态规划:构造状态转移方程,设计合适的状态表示,构造动态规划解
  • 贪心算法:构造出合适的贪心策略,使得贪心策略能够得到最优解
  • 模拟问题:设计模拟题,要求选手模拟特定场景或过程,根据模拟的结果得出答案

二:典型题目

(1)题目一

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

这种题目最简单的方法就是找规律,也就是归纳

在这里插入图片描述

因此,当N=n时,x=2n,y=3n,z=6n为原式的一组解

(2)题目二

在这里插入图片描述

数学问题:如果有一组整数 a 1 , a 2 , . . , a N a_{1},a_{2},..,a_{N} a1,a2,..,aN,并希望找到一个最短的等差数列来包含它们,那么需要考虑这些整数的插值。因为,为了保证所有整数都能在等差数列中,我们需要找到这些差值的最大公约数 d d d,因为 d d d是所有这些差值的因数,所以如果以 d d d为长从最小值到最大值构建等差数列,它一定能包含所有给定的整数

  • 确定最小值和最大值
  • 计算最大值和最小值的差值
  • 计算这N个整数的差值的最大公约数(GCD)。这可以通过对所有整数对之间的差值计算GCD来完成。
  • 使用最小值作为初始值,公差d进行构造,从最小值到最大值的等差数列

(3)题目三

在这里插入图片描述

突破点在(a&1)xor(b&1)=1

  • 某个数和1做与运算,表示判断该数的最后一位是不是1。如果是1则表示它是奇数,如果是0则表示它是偶数
  • 做异或运算后结果为1,就表示两个数不能同时为奇数或者偶数
  • 那么只有一种可能,一个是奇数,一个是偶数

这个题最好的方法就是一个也不连,那肯定满足题意,但是题目要求需要构造包含 N N N个节点的连通图,所以不能一个都不连。那么秉持着少连就能少得出现错误的原则,我们可以最少给它连接 N − 1 N-1 N1条边,形成一个树即可

因此,题目转化为:构建一颗只由奇偶连边的树,并且使得最长边和最短边权值之差不超过3

如果要让其最小,那么让最大值最小,最小值最大即可。假如 N N N偶数,那么

  • 1 1 1连接 N N N
  • 3 3 3连接 N − 2 N-2 N2

此时所有边的权值都是 N + 1 N+1 N+1

在这里插入图片描述

但现在它是不连通的,我们再考虑 N + 3 N+3 N+3的边,这样的话最大值与最小值之间的差为2,符合题意(当然这不是唯一解)

  • 3 3 3 N N N
  • 5 5 5 N − 2 N-2 N2

在这里插入图片描述

但是如果 N N N为奇数怎么办?也很简单,再添加一个节点,让其为偶数,然后直接练到1上

(4)题目四

在这里插入图片描述

思路

  • 将最后一位数字设置为3
  • 将前面的位数都设置为2,这样可以确保数不会被最后一位的3整除,由于最后一位是3不是偶数,所以也无法被2整除
  • 接着,我们检查前面的位数,如果前面的位数的数量是3的倍数(一个简单的知识如果个个位数的和能够被3整除那么这个数也能被3整除),此时那么我们可以将第一位的2替换为一个素数(比如5或7),这样就可以确保数不会被整除,同时也满足了题目的条件

例如

  • 对于n=3:

    • 初始化为 223
    • 位数和为 2 + 2 + 3 = 7,不是3的倍数,所以无需修改
    • 最终结果为 223
  • 对于 n=4:

    • 初始化为 2223
    • 位数和为 2 + 2 + 2 + 3 = 9,是3的倍数,将第一个2替换为5
    • 最终结果为 5223

(5)题目五

在这里插入图片描述

思路

在这里插入图片描述

这篇关于【无标题】蓝桥杯软件赛Java研究生组/A组)第二章基础算法-第四节:构造的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1072869

相关文章

Java五子棋之坐标校正

上篇针对了Java项目中的解构思维,在这篇内容中我们不妨从整体项目中拆解拿出一个非常重要的五子棋逻辑实现:坐标校正,我们如何使漫无目的鼠标点击变得有序化和可控化呢? 目录 一、从鼠标监听到获取坐标 1.MouseListener和MouseAdapter 2.mousePressed方法 二、坐标校正的具体实现方法 1.关于fillOval方法 2.坐标获取 3.坐标转换 4.坐

Spring Cloud:构建分布式系统的利器

引言 在当今的云计算和微服务架构时代,构建高效、可靠的分布式系统成为软件开发的重要任务。Spring Cloud 提供了一套完整的解决方案,帮助开发者快速构建分布式系统中的一些常见模式(例如配置管理、服务发现、断路器等)。本文将探讨 Spring Cloud 的定义、核心组件、应用场景以及未来的发展趋势。 什么是 Spring Cloud Spring Cloud 是一个基于 Spring

RedHat运维-Linux文本操作基础-AWK进阶

你不用整理,跟着敲一遍,有个印象,然后把它保存到本地,以后要用再去看,如果有了新东西,你自个再添加。这是我参考牛客上的shell编程专项题,只不过换成了问答的方式而已。不用背,就算是我自己亲自敲,我现在好多也记不住。 1. 输出nowcoder.txt文件第5行的内容 2. 输出nowcoder.txt文件第6行的内容 3. 输出nowcoder.txt文件第7行的内容 4. 输出nowcode

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

java8的新特性之一(Java Lambda表达式)

1:Java8的新特性 Lambda 表达式: 允许以更简洁的方式表示匿名函数(或称为闭包)。可以将Lambda表达式作为参数传递给方法或赋值给函数式接口类型的变量。 Stream API: 提供了一种处理集合数据的流式处理方式,支持函数式编程风格。 允许以声明性方式处理数据集合(如List、Set等)。提供了一系列操作,如map、filter、reduce等,以支持复杂的查询和转

Vim使用基础篇

本文内容大部分来自 vimtutor,自带的教程的总结。在终端输入vimtutor 即可进入教程。 先总结一下,然后再分别介绍正常模式,插入模式,和可视模式三种模式下的命令。 目录 看完以后的汇总 1.正常模式(Normal模式) 1.移动光标 2.删除 3.【:】输入符 4.撤销 5.替换 6.重复命令【. ; ,】 7.复制粘贴 8.缩进 2.插入模式 INSERT

Java面试八股之怎么通过Java程序判断JVM是32位还是64位

怎么通过Java程序判断JVM是32位还是64位 可以通过Java程序内部检查系统属性来判断当前运行的JVM是32位还是64位。以下是一个简单的方法: public class JvmBitCheck {public static void main(String[] args) {String arch = System.getProperty("os.arch");String dataM

详细分析Springmvc中的@ModelAttribute基本知识(附Demo)

目录 前言1. 注解用法1.1 方法参数1.2 方法1.3 类 2. 注解场景2.1 表单参数2.2 AJAX请求2.3 文件上传 3. 实战4. 总结 前言 将请求参数绑定到模型对象上,或者在请求处理之前添加模型属性 可以在方法参数、方法或者类上使用 一般适用这几种场景: 表单处理:通过 @ModelAttribute 将表单数据绑定到模型对象上预处理逻辑:在请求处理之前

eclipse运行springboot项目,找不到主类

解决办法尝试了很多种,下载sts压缩包行不通。最后解决办法如图: help--->Eclipse Marketplace--->Popular--->找到Spring Tools 3---->Installed。

JAVA读取MongoDB中的二进制图片并显示在页面上

1:Jsp页面: <td><img src="${ctx}/mongoImg/show"></td> 2:xml配置: <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001