算法设计与分析:枚举和递推的运用 ————双关系递推数列

article/2025/9/14 3:44:55

头歌实验

第一关:双关系递推数列

任务描述

本关任务:运用枚举和递推的基本思想,通过编程计算出双关系递推数列。设集合 M 定义如下:

1.初始 1∈M;

2.若x∈M,则有2x+1∈M,5x−1∈M;

3.再无其它的数属于M。

试求集合M中的元素从小到大排列后所得序列的第n项,其中n<10001。

枚举算法的两种框架

枚举的本质就是从所有的备选答案中去查询正确的解。一般的,使用枚举算法需要满足两个基本条件:

  • 备选答案的数量是确定的或是有限个数的;
  • 备选答案的范围在求解之前也应该是确定的。

枚举算法有两种常见的框架:区间枚举和递增枚举。

区间枚举的主要思想是对于一个给定的闭区间,从该区间的下限一直逐个枚举到该区间的上限;

递增枚举的主要思想是从给定的枚举起点开始,一直逐个枚举,直到找到满足条件的解,程序结束。

递推算法的实施步骤

递推的定义:给定一个数的序列H0​,H1​,...,Hn​,...,若存在整数n0​,使当n>n0​时,可以用等号(或大于号、或小于号)将Hn​与其前面的某些项Hi​,i∈[0,n0​]联系起来,这样的式子就叫做Hn​的递推式。递推算法的具体实施步骤如下:

    确定递推变量:递推变量可以是简单变量,也可以是一维或多维数组;

   建立递推关系:递推关系是递推的依据,是解决递推问题的关键;

   确定初始值和边界条件:根据问题最简单情形的数据,确定递推变量的初始值和边界条件,这是递推的基础;

   对递推过程进行控制:和枚举算法互相配合,完成递推问题的求解。

问题求解思路

该问题已经给出了递推变量x和递推关系2x+1,5x−1,以及初始值为x=1,但是不知道边界条件,也就是说要递推出足够多的项,然后才能找到排序后的第n项。

借助从小到大排序这一限制条件,我们可以设置两个变量,分别控制递推关系2x+1和5x−1的递推进程,使得依次递推出的序列是有序的,那么边界条件即为第n项递推的结束。

例如n=10时,通过递推可以得到第10项为31,具体步骤如下:

1.第1步:给定数组m,从下标1开始存储有序递推数列,初始值m[1]=1,设定p2​=p5​=1,分别表示递推关系F2​(x)=2x+1和F5​(x)=5x−1的上一项递推变量x在数组m中的索引。

2.第2步:分别计算两个递推式的值,若F2​(m[p2​])<F5​(m[p5​]),则数组m的第i=2项为m[2]=F2​(m[p2​]),并更新p2​=p2​+1;若F2​(m[p2​])>F5​(m[p5​]),则数组m的第i=2项为m[2]=F5​(m[p5​]),并更新p5​=p5​+1;若F2​(m[p2​])=F5​(m[p5​]),则数组m的第i=2项为m[2]=F2​(m[p2​]),并更新p2​=p2​+1,p5​=p5​+1。

3.第3步至第n步:按照第2中的递推过程,依次递推出第3项,第4项,直到第n项的值。

 

编程要求

本关的编程任务是补全右侧代码片段mainBeginEnd中间的代码,具体要求如下:

  • main中,根据枚举和递推的基本思想,计算出双关系递推数列的前n项,并从小到大存储到数组m中,下标从1开始,即第一项为m[1]=1

 实验代码段:

#include <iostream>
#include <cstdio>int main(int argc, const char * argv[]) {long long m[10001];     // 数组:从小到大保存的集合M的元素int n;                  // 查询第n项int p2;                 // F2(x)=2x+1的索引指针int p5;                  // F5(x)=5x-1的索引指针scanf("%d",&n);m[1]=1;p2=1;p5=1;// 请在这里补充代码,完成本关任务/********* Begin *********/int sum = m[1];for(int i=2;i<=n;i++){int tmp2 = 2*m[p2]+1;	int tmp5 = 5*m[p5]-1;if(tmp2>tmp5){m[i] = tmp5;p5++;}else if(tmp2<tmp5){m[i] = tmp2;p2++;}else{m[i] = tmp2;p2++;p5++;}sum+=m[i];} /********* End *********/printf("%lld\n",m[n]);return 0;
}

 实验结果:

 


http://chatgpt.dhexx.cn/article/jPphShkt.shtml

相关文章

递推数列的计算

利用递归函数 我们最熟悉的一个递推数列就是斐波那契数列。 1 , 1 , 2 , 3 , 5 , 8 , 13 , 21 , . . . 1, 1, 2, 3, 5, 8, 13, 21, ... 1,1,2,3,5,8,13,21,...&#xff0c;斐波那契数列规定数列的第一个元素和第二个元素都为1&#xff0c;后面的元素是前两个元素之和&#xff…

极限求解--递推型数列

本文来自于公众号【考研数学直线笔记】 0 序言 递推型数列&#xff0c;一般可以表示为x(n1)f(x(n))&#xff0c;这一类题目的基本思想都是“先证明数列的极限存在&#xff0c;然后再求出极限值”&#xff0c;求极限值比较简单&#xff0c;设极限求等式就行了&#xff0c;难点在…

Autohotkey window 下宏键盘、宏命令开发入门

? ? ? ? 我的AHK下载地址:https://github.com/dragon8github/Pandora/raw/master/pandora.exe AutoHotKey 下载:https://autohotkey.com/download/ 国内自制的ahk网站:https://www.autoahk.com/ 推荐下载installer 官方网站:https://www.autohotkey.com/docs/AutoHot…

【开源项目分享】GitHub中文排行榜 - 帮助你发现高分优秀中文项目-Java

榜单设立目的 &#x1f1e8;&#x1f1f3; GitHub中文排行榜&#xff0c;帮助你发现高分优秀中文项目&#xff1b;各位开发者伙伴可以更高效地吸收国人的优秀经验、成果&#xff1b;中文项目只能满足阶段性的需求&#xff0c;想要有进一步提升&#xff0c;还请多花时间学习高分…

HTML+CSS+JS+Servlet+MSQL搭建个人博客

3.应用技术&#xff1a;HTMLCSSJSJSPServletMSQL 前端后台管理。 4.开发环境&#xff1a;eclipsejdk1.8tomcat8.5 mysql5.7前端Layui。 二、前端 1.博客首页 博主和用户可以访问到博客系统的首页&#xff0c;首页内容主要包括导航条&#xff0c;文章推荐和登录注册管理模块…

用 Dev-C++ 编写简单的走迷宫小游戏

用 Dev-C 编写简单的走迷宫小游戏 前言基础版优化版 前言 以下是显示效果 B站视频讲解&#xff1a;【小游戏】用 Dev-C 编写简单的控制台走迷宫小游戏 【小游戏】用 Dev-C 编写简单的控制台走迷宫小游戏 基础版 用 # 代表墙 用 空格 代表空地 用 O 代表玩家 地图存储&#…

简单的迷宫问题(DFS/BFS分别求解)

简单的迷宫问题 题目描述输入样例输出样例 dfs解题思路(深搜)路线规划DFS特点C源码(DFS) bfs解题思路(广搜)路线规划测试代码段BFS特点C源码&#xff08;BFS&#xff09; 题目描述 现在需要你来规划一条路线&#xff0c;从起点到终点的最短路线。 给你一个nm的地图&#xff08;…

基于JAVA的简单迷宫游戏

一、实验要求 1. 迷宫游戏是非常经典的游戏&#xff0c;在该题中要求随机生成一个迷宫&#xff0c;并求解迷宫。 2. 要求游戏支持玩家走迷宫&#xff0c;和系统走迷宫路径两种模式。玩家走迷宫&#xff0c;通过键盘方向键控制&#xff0c;并在行走路径上留下痕迹&#xff1b;系…

C++实现简单的走迷宫

c实现简单走迷宫 用n*n个小方格代表迷宫&#xff0c;每个方格上有一个字符0或1&#xff0c;0代表这个格子不能走&#xff0c;1代表这个格子可以走。只能一个格子一个走&#xff0c;而且只能从一个格子向它的上、下、左、右四个方向走&#xff0c;且不能重复。迷宫的入口和出口分…

迷宫问题(简单模拟)

目录导航 图解体会领悟&#xff1a;代码实现&#xff08;Java&#xff09;&#xff1a;C语言版C版 为了复习递归&#xff0c;而模拟学习的。所以迷宫不大&#xff0c;总体是8行7列。 图解 A为起点&#xff0c;B为终点。 如下图在A和B之间设置挡板被隔绝之后&#xff0c;结果如…

超级简单的迷宫代码 初学者程序

迷宫 走迷宫一种比较有趣&#xff0c;操作简单的小游戏。 #include<stdio.h> #include<getch.h> #include<stdlib.h> #include<time.h> int main(int argc,const char*argv[]) {//构造迷宫地图char maze[10][10]{{#,#,#,#,#,#,#,#,#,#},{#,,#,#,#,#…

最简单的迷宫求解

在计算机中&#xff0c;我们可以把迷宫当做一个二维数组。其中0表示通路&#xff0c;1表示墙。 我们以下图为例&#xff0c;对于只有一条通路的简单迷宫进行求解 该迷宫存储在“Map.txt”文档中。 对于该迷宫&#xff0c;我们首先将入口点压入栈中&#xff0c;然后通过对该点…

JAVA 中实现的简单的迷宫小游戏

多的不说&#xff0c;直接上代码&#xff0c;就是一个简单的迷宫小游戏。 import java.awt.Color; import java.awt.Graphics; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.util.Random; import java.util.Stack; import javax.swing.JFr…

Python实现迷宫游戏

项目&#xff1a;迷宫游戏 摘要1.引言1.1研究的背景及意义1.2研究的内容 2.系统结构2.1系统的结构2.2基本思路 3.实现代码3.1Maze类3.2Player类3.3Controller类3.4主函数 4.实验5.总结和展望参考文献 摘要 本次实验设计了一款迷宫小游戏&#xff0c;采用用Python开发技术实现。…

C语言实现简单迷宫

C语言实现迷宫程序 前言 大家小时候一定都玩过迷宫这个游戏&#xff0c;很吸引人吧&#xff0c;有那种走不出来就不罢休的执着&#xff0c;然后走出来了觉得自己很强&#xff0c;自己可以了&#xff0c;接着激动的开始下一个关卡&#xff0c;慢慢的沉溺在迷宫的世界里了。 然…

如何使用C语言实现简单迷宫(递归和非递归实现 含图例)

1.非递归实现 简单迷宫&#xff1a;只有一条通路的迷宫 思路&#xff1a;在找迷宫通路的时候&#xff0c;我们往往是在给定入口(入口合法且为通路)的情况下&#xff0c;沿着入口的某个方向走&#xff08;此方向是通路&#xff09;。现给定走迷宫的方向&#xff1a;上、左、右…

简单迷宫(递归)

代码思路 1.创建二位数组作为迷宫 2.数字1为墙壁&#xff0c;2为经过的位置&#xff0c;3为死路&#xff0c;0为未探寻的位置 3,定义一个起点和终点&#xff0c;运用递归的方法&#xff0c;按照自己设计的寻找方向的优先级运行&#xff0c;直到让终点值为2则返回true&#x…

简单迷宫问题

简单迷宫问题 一、问题描述二、数据组织三、算法说明附录&#xff1a;完整代码 #简单迷宫问题 一、问题描述 给定一个MN得迷宫&#xff0c;求一条从指定入口到出口得迷宫路径。假设一个迷宫如图1所示&#xff0c;&#xff08;这里MN8)&#xff0c;其中每个方块用空白表示通道…

maven生命周期lifecycle和plugins介绍

一、Maven的生命周期 生命周期的定义&#xff1a;Maven的生命周期就是为了对所有的构建过程进行抽象和统一。在大量项目的构建过程中&#xff0c;Maven总结出了一套高度完善的&#xff0c;易于扩展的生命周期&#xff0c;包括项目的清理&#xff0c;初始化&#xff0c;编译&am…