- 博客(56)
- 收藏
- 关注
原创 迭代和递归
迭代迭代是循环的一种方式,它是重复的活动,其目的通常是为了逼近结果。每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。递归就是在运行的时候调用自己,递归可以理解为回归本心,最后调用自己。这里有一道题,就是关于递归的,前三个结果都是一样的,只有最后一个是少了一步def fact(n): if n == 1: return 1 return n*fact(n-1)def inner_fact(n, m):...
2022-05-31 14:33:20 309
原创 factorial函数
factorial() 是数学模块的库方法,用于查找给定数字的阶乘,它接受正整数并返回数字的阶乘。import mathr=math.factorial(5)1.factorial()不可以被定义为负数2.factorial() 可以定义为0或者正整数3.factorial() 不可以被定义为浮点数...
2022-05-31 13:31:53 9762
原创 贪心法求解硬币问题和乘船问题
贪心算法基本要素:贪心选择性质:问题的最优解可以通过贪心选择实现(也就是先实现局部最优解,然后整体最优解可以通过一系列局部最优的选择来达到) 最优子结构性质:问题的最优解包含子问题的最优解贪心算法步骤:通过数学模型来描述问题 把求解问题分成多个子问题 对每一个子问题进行求解,找到局部最优解 把子问题的局部最优解合成原来解问题的一个解贪心算法和动态规划区别 贪心法 贪心算法是自顶向下的,只查看了当前状态 贪心算法,仅在当前状态下做出最好选择,即.
2022-05-15 15:09:26 4416
原创 任务分配(回溯法)以及与分支限界法区别
一、问题描述:设有 n 件工作分配给 n 个人。将工作 i 分配给 j 个人所需的费用为。试设计一个算法,为每个人都分配 1 件不同的工作,并使得总费用最小。下面这个表格就是代表成本:人员 任务1 任务2 任务3 任务4 1 9 2 7 8 2 6 4 3 7 3 5 8 1 8 4 7 6 9 4 未优化之前情况①:cost大于mincos...
2022-05-13 10:17:53 1492
原创 任务分配(分支限界法)
问题描述假设有n个任务需要分配给n个人执行,每个人只执行一个任务,每个任务只由一个人执行。第i个人执行第j个任务的成本是Cij(1<=i,j<=n), 求解初最小成本的分配方案。下面这个表格就是代表成本人员 任务1 任务2 任务3 任务4 1 9 2 7 8 2 6 4 3 7 3 5 8 1 8 4 7 6 9 4 优先队列的分支限界法:就是对小
2022-05-12 23:23:24 5551 6
原创 四皇后问题(多种方法)
问题描述:以4皇后为例,其他的N皇后问题以此类推。所谓4皇后问题就是求解如何在4×4的棋盘上无冲突的摆放4个皇后棋子。在国际象棋中,皇后的移动方式为横竖交叉的,因此在任意一个皇后所在位置的水平、竖直、以及45度斜线上都不能出现皇后的棋子。回溯法:dfs+迭代1.如何判断当前位置的取值满足条件:假设一个变量,每次设值都与前面已经设置好了的皇后的位置进行比较,是否同行同列,同斜线可以使用表达式:a[i]=a[j]=i-j || a[i]-a[j]=j-i2.什么情况下成功找到四皇后的摆放位置:当i&
2022-05-11 21:06:23 13043 3
原创 回溯法求最大团问题
问题描述:给定无向图G=(V, E),其中V是非空集合,称为顶点集;E是V中元素构成的无序二元组的集合,称为边集,无向图中的边均是顶点的无序对,无序对常用圆括号“( )”表示。如果U∈V,且对任意两个顶点u,v∈U有(u, v)∈E,则称U是G的完全子图(完全图G就是指图G的每个顶点之间都有连边)。G的完全子图U是G的团当且仅当U不包含在G的更大的完全子图中。G的最大团是指G中所含顶点数最多的团。//最大团问题 回溯法求解#include <iostream>using namespac
2022-05-08 22:27:49 935
原创 蛮力法求解好多鱼问题
问题求解思路:首先这道题给的示例是尺寸为1,它一共有3种可能性能够实现这个要求,要不就是尺寸为1,要不就是11和12。那麽这道题我刚开始一直报错因为我一直忽略掉尺寸是否为0这个点,也就是我把两条鱼进行比较结果忽略掉了它们相除为0,后来改掉了。关于这个题,我主要是让这两条🐟的相除值是否==1和是否大于10来计算。#include<iostream>using namespace std;int main(){ int minsize, maxsize,n; cin >> .
2022-05-03 19:44:32 1371 2
原创 回溯法求解简单装载问题
问题描述:有一批集装箱要装上一艘载重量为W的轮船,其中编号为i(0<= i<=n-1)的集装箱的重量为wi。现要从n个集装箱中选出若干个装上轮船,使得他们的重量之和恰好为W。如果找到任何一种解,返回true,否则返回false。思路:其实这道题运用了回溯法一个非常明显的特点,就是剪枝法。也就是狭义回溯法定义“回溯法=DFS+剪枝法”;另一种广义定义就是递归喽。#include<iostream>using namespace std;int w[] = { 0,5,2,6,4
2022-05-01 21:29:51 4429 1
原创 回溯法求全排列
问题描述:对于递增序列a[]={1,2,3,4,5},采用回溯法求解全排列,以1,2开头的排序一定最先出现吗?为什么?回溯法:了解一下什么是回溯法吧,他一般有两种形式,不过这道题我采用的是第二种形式,也就是递归回溯框架。递归回溯框架一般都是从i开始搜索,也就是i=0或者i=1,一般情况下i=0跳出递归的条件是if(i>=n), i=1跳出递归的条件是if(i>n);然后就是用for循环令j=i进行枚举,使得所有路径都可以被扩展。#include<iostream>using n
2022-05-01 20:27:18 689
原创 【求解数字和为sum的方法数问题】
问题描述:给定一个有n个正整数的数组a和一个整数sum,求选择数组a中部分数字和为sum的方案数。当两种选取方案有一个数字的下标不一样,我们就认为是不同的组成方案。输入描述:输入为两行: 第一行为两个正整数n(1 ≤ n ≤ 1000),sum(1 ≤ sum ≤ 1000)第二行为n个正整数ai,以空格隔开。输出描述:输出所求的方案数示例1输入5 155 5 10 2 3输出4#include<iostream>using namespace std;int n,
2022-04-27 20:43:25 400
原创 【求解公路上任意两点的最近距离】
问题描述:某环形公路上有n个站点,分别记为a1,a2…an,从ai到ai+1的距离为di,从an到a1的距离为d0,假设d0=dn=1,保存在数组d中,编写一个函数高效地计算出公路上任意两点地最近距离。本人非常悲伤的是:写的时候把d[100]写进了定义的函数里,然后又在main函数定义了一次,以至于一直报错,非常悲伤,不过后来问了别人把bug改出来了,所以一定要定义全局变量#include <iostream>using namespace std;int d[100];void m
2022-04-27 19:15:18 1219 2
原创 【Josephus环问题】
(一) 问题描述功能要求:建立一个循环表,声明入队出队算法,然后在主函数中使用输入输出要求:用c++的方式正确输入输出;测试数据样例 n=10;k=3;(二)算法结构分析与设计算法中抽象数据类型定义:定义了出对入队方法算法主要思路:在主函数体外声明定义了一个循环列表和一个出队入队函数,然后在main()函数里用for循环实现入队出队操作#include<iostream>#include<stdio.h>#include<stdlib.h>us
2022-04-26 13:29:30 1438
原创 【校园导游】
(一) 问题描述功能要求:设计一个校园导游程序,为来访的客人提供各种信息查询服务。查询服务有:提供任意景点的信息,提供任意两点之间的最短路径,提供任意景点之间的所有路径,提供多个景点之间的最佳访问路径。输入输出要求:用c语言的方式正确输入输出;(二)算法结构分析与设计1.算法中抽象数据类型定义: stack,struct2.算法主要思路:(三)算法详细设计1.采用c++定义相关的数据类型:int,2.算法中主要函数及其作用void Creat_vertex() //创建无向图v
2022-04-26 13:25:28 2045
原创 【哈夫曼编码器】
(一)问题描述功能要求:通过c++的形式实现哈夫曼树的建立和哈夫曼编码的输出输入输出要求:用cin,cout的方式正确输入输出;(二)算法结构分析与设计1.算法中抽象数据类型定义:char**p(二级指针) new创建空间2.算法主要思路:建立哈夫曼树,然后在这个基础上求叶节点的编码(三)代码#include <iostream>#include <stdio.h>#include <stdlib.h>using namespace std;ty
2022-04-26 13:17:21 752
转载 最短路径问题
#include<iostream>using namespace std;#define nmax 100#define inf 999999999int minpath, n, m, en, edge[nmax][nmax], mark[nmax];//最短路径,节点数,边数,终点,邻接矩阵,节点访问标记void dfs(int cur, int dst) //dsf代表当前路径,当前走过的公路数,cur代表出发的城市{ if (minpath < ds.
2022-04-20 11:16:30 99
原创 求解查找假币问题
问题描述编写一个实验程序查找假币问题。有n(n>3)个硬币,其中有一个硬币,且假币较轻,采用天平称重的方式找到这个假币#include<iostream>using namespace std;int main(){ int n; cin >> n; int a[100]; int av = 0; for (int i = 0;i < n;i++) { cin >> a[i]; } for (int j = 0;j &l
2022-04-19 19:44:40 1446
原创 【全排列】
忘了转载谁的了#include<iostream>using namespace std;void swap(int &a,int &b){ int temp; temp = a; a = b; b = temp;}int i, k, m;void qpl(int *list,int k,int m){ if (k == m)//定义k为第几个数,m为数组长度,如果k=m,则它们不进行交换,进入循环输出即可 { for (i = 0;i <
2022-04-17 00:16:54 218
原创 【计算阶乘之和】
计算1!+2!+…+n!递归方法#include<iostream>using namespace std;int fac(int n);int main(){ int n,n1=0,sum=0; cin >> n; for (int i = 0;i < n;i++) { n1 = fac(n); sum += n1; } cout << sum; return 0;}int fac(int n){ if (n == 1
2022-04-16 11:11:38 199
原创 求解逆序数的个数
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。示例 1:输入: [3,1,4,5,2]输出: 4这道题的思路借鉴了该死的奥数那道题,运用二维数组,第一行表示数字,第二行表示是否访问过,但是没有运用递归# include <iostream>using namespace std;# define N 5 //几位数 int DFS(int A[2][N]);int main() { int A[2
2022-04-16 10:22:08 389
原创 【大数据导论】
第四章(单选题)以下哪项不属于大数据在城市管理中的应用:( )• A. 智能交通• B. 环保监测• C. 城市规划• D. 比赛预测我的答案: D正确答案: D(单选题)下面关于推荐系统的描述错误的是:( )• A. 推荐系统是自动联系用户和物品的一种工具• B. 和搜索引擎相比,推荐系统通过研究用户的兴趣偏好,进行个性化计算• C. 推荐系统可发现用户的兴趣点,帮助用户从海量信息中去发掘自己潜在的需求• D. 推荐系统是一种只能通过专家进行人工推荐的系统我的答案: D正确
2022-04-15 11:28:23 12580
转载 【大数据导论】
第一章(单选题)【单选题】以下哪个不是大数据的“4V”特性:( )• A. 数据量大• B. 数据类型繁多• C. 处理速度快• D. 价值密度高我的答案: D正确答案: D(单选题)【单选题】英国的大数据发展战略是:( )• A. 稳步实施“三步走”战略,打造面向未来的大数据创新生态• B. 通过发展创新性解决方案并应用于实践来促进大数据发展• C. 以大数据等技术为核心应对第四次工业革命• D. 紧抓大数据产业机遇,应对脱欧后的经济挑战我的答案: D正确答案: D(单选题)【
2022-04-15 11:03:52 29370
转载 【坑爹的奥数】
例如:173+286=459就是一种组合请问一共有多少组合呢?注:173+286=459 与286+173=459是一种组合!# include <iostream>using namespace std;# define N 11 //几位数 int X, Y, Z, SUM = 0;void DFS(int A[2][N], int step);//A为二维数组 初始化为0 M为A种用的数组长度 step用于递归int main() { int A[2][N] =.
2022-04-13 22:15:42 126 1
原创 求解幸运数问题(递归)
【问题描述】小明同学在学习了不同的进制之后用一些数字做起了游戏。小明同学知道,在日常生活中最常用的是十进制数,而计算机中的二进制数也很常用。现在对于一个数字x,小明同学定义出两个函数f(x)和g(x)f(x)表示把x这个数用十进制写出后各数位上的数字之和,例如f(123)=1+2+3=6g(x)表示把x这个数用二进制写出后各数位上的数字之和,例如123的二进制表示为1111011那么g(123)=1+1+1+1+0+1+1=6。小明同学发现对于一些正整数x满足f(x)= g(x),他把这种数称为幸运
2022-04-13 19:26:23 501
原创 逆置无头结点的单链表
对于不带头结点的单链表L,设计一个递归算法逆置所有结点。编写完整的实验程序,并采用相应数据进行测试。采用递归方法思路:设f(L)返回单链表逆置后的首结点指针,为“大问题”,则f(L->next)返回逆置后的首结点指针p,为“小问题”,当小问题解决后,大问题的求解只需要将首结点(L指向它)链接到L->next节点的末尾就可以了。#include<iostream>using namespace std;#define NULL 0typedef struct node{
2022-04-13 10:43:37 5140 1
原创 最长公共字串和最长公共子序列
为了方便自己理解,我决定写一下它们的区别最长公共子串:首先关于它的理解就是,既然是子串,那它肯定是连续的拿一个例子来说话hishf0000i0100s0020h1003看这两个fish和hish,它们的原理就是对比是否相同,如果相同就在前一个的基础上+1比如那个123就是折磨来的,而第五行的那个1,是因为他和另一个hish的第一个进行比较,不管怎么样,最多只能有一个代码相同,用代码来表示的原理就是if(word_a[
2022-04-10 20:03:43 237
原创 0/1背包
有关0/1背包问题有自己一点小小的理解拿一个例题来说题目是这样的这道题理解就是行代表的是容纳量,列代表的是可拿东西的编号,假如说第3行,当列为8的时候,那就可以拿走前三个,但如果是8.5,是不能拿走四个的,因为还没有轮到它,只有当第四行的时候才可以考虑是否可以拿走前四个。并且挑选要挑选能拿走的最贵的差不多就是这个意思...
2022-04-10 19:23:00 231
原创 如何表示数组的长度
如何表示数组的长度//数组占内存总空间,除以单个元素占内存空间大小,就可以表示数组的长度我们一般情况下,会表示一个数组,然后用sizeof来求解数组长度{int a[]={1,2,3,45,5};int length;length= sizeof (a)/ sizeof (a[0]); //数组占内存总空间,除以单个元素占内存空间大小,还要确定a[4]}...
2022-03-27 21:38:15 3733
原创 7-20 打印九九口诀表 (15 分)
#include<iostream>using namespace std;int main(){ int n; cin>>n; for(int i=1;i<=n;i++) { for(int j=1;j<=i;j++) printf("%d*%d=%-4d",j,i,j*i); cout<<endl; } return 0; }我在这里有.
2022-03-20 16:55:16 269
原创 7-16 求符合给定条件的整数集 (15 分)
#include <iostream>using namespace std;int main(){ int n; cin >> n; int cnt=1; for(int i=n;i<=n+3;i++){ for(int j=n;j<=n+3;j++){ for(int k=n;k<=n+3;k++){ if(j!=k&&i!=k&.
2022-03-06 16:46:45 147
转载 【1007 Maximum Subsequence Sum (25 分)】
#include<iostream>using namespace std;int main(){ int N; cin>>N; int in[N]; int result[N]; int dp[N]; for(int i=0;i<N;++i) cin>>in[i]; dp[0]=max(in[0],0); //动态规划,初始状态定义 for(int i=1;i<N;++i){ if(dp[i-1.
2022-01-20 22:03:10 77
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人