
基础算法
莉莉诗安
这个作者很懒,什么都没留下…
展开
-
深度搜索-扫地机器人
扫地机器人Mike同学在为扫地机器人设计一个在矩形区域中行走的算法,Mike是这样设计的:先把机器人放在出发点(1,1)点上,机器人在每个点上都会沿用如下的规则来判断下一个该去的点是哪里。规则:优先向右,如果向右不能走(比如:右侧出了矩形或者右侧扫过了)则尝试向下,向下不能走则尝试向左,向左不能走则尝试向上;直到所有的点都扫过。Mike为了验证自己设计的算法是否正确,打算先模拟一下这个算法,每当机器人走过一个单元格时,会在单元格内标记一个数字,这个数字从1开始,每经过一个单元格数字会递增1,直到所有的单原创 2021-08-02 10:13:58 · 971 阅读 · 0 评论 -
排序-选择、冒泡排序
选择排序从第一个开始,找到最小(大)的交换排序过程 5 8 9 6 71:5 -8 9 6 72:5 6-9 8 73:5 6 7-9 84:5 6 7 8-9 9 2 10 8 5 6 41:2-9 10 8 5 6 42:2 4-10 8 5 6 93:2 4 5-8 10 6 94:2 4 5 6-10 8 95:2 4 5 6 8-10 96:2 4 5 6 8 9-10代码实现#include<iostream>using namespace原创 2021-07-31 15:03:15 · 145 阅读 · 0 评论 -
贪心算法动态规划-排队打水、导弹问题、活动选择
排水打水问题有n个人排队到r个水龙头去打水,他们装满水桶的时间t1,t2,…,tn为整数且各不相等,应如何安排他们的打水顺序才能使他们花费的总时间最少?每个人打水的时间 = 排队的时间 + 实际打水的时间,本题假设一个人打好水,排在他后面的人接着打水的这个切换过程不消耗时间。比如,有2个人A和B,他们打水的时间分别是3和2,只有1个水龙头,这时,如果A先打水,B后打水,那么A和B打水的时间分别为3、3+2(B排队3分钟)。因此,所有人打水的总时间就是每个人的打水时间及每个人的排队时间的总和。输入格原创 2021-07-30 11:45:16 · 871 阅读 · 0 评论 -
贪心算法、递推-数塔问题
题目描述有如下所示的数塔,要求从底层走到顶层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?输入格式输入数据首先包括一个整数整数N(1 <= N <= 100),表示数塔的高度,接下来用N行数字表示数塔,其中第i行有个i个整数,且所有的整数均在区间[0,99]内。输出格式从底层走到顶层经过的数字的最大和是多少?样例输入573 88 1 02 7 4 44 5 2 6 5样例输出30题解1.找规律贪心算法:找到当前最优将最后一层最优值加到上原创 2021-07-30 09:50:58 · 1388 阅读 · 0 评论 -
递推-找规律-过河卒
猴子吃桃子猴子吃桃子问题:猴子第一天摘下若干个桃子,当即吃了一半还不过瘾,又多吃了一个;第二天又将剩下的桃子吃掉一半又多吃了一个;以后每天早上都吃了前一天剩下的一半零一个。到了第十天想再吃时,见只剩下一个桃子,求第一天共摘了多少个桃子?题解/*设第九天剩x个taox/2-1=1; y/2-1=x;(x+1)*2=y*/#include<iostream>using namespace std;int main(){ int x=1; for(int i=9;i>原创 2021-07-28 11:26:57 · 743 阅读 · 0 评论 -
递归优化为递推:数组/临时变量-计算兔子(斐波那契数列)
题目有一对兔子,从出生后第3个月起每个月都生一对兔子,一对小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第n个月(n<=50)的兔子总数为多少对?题解/*找规律:111+1=22+1=33+2=5a(n)=a(n-1)+a(n-2) */#include<iostream>using namespace std;int num(int n){ int r; if(n==1||n==2) r=1; else r=num(n-1)+num原创 2021-07-28 09:08:25 · 192 阅读 · 0 评论 -
数组-校门外的树
题目描述某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,…,L都种有一棵树。由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。比如:L=5,那么马路上默认有6棵树,分别种在0原创 2021-07-26 16:40:12 · 181 阅读 · 0 评论 -
递归-输出顺序、等差数列、n的阶乘、三角形、最大公约数、找规律
/*p(5){ p(4){ p(3){ p(2){ p(1){ p(0);停止,n=1 1; } 2 2; } 3 3 3; } 4 4 4 4; }5 5 5 5 5;}*/ #include<iostream>using namespace std;void p(int n){ if(n>0){ p(n-1); for(int i=0;i<n;i++) cout<<n原创 2021-07-24 09:38:31 · 336 阅读 · 0 评论 -
递归-二叉树根据先序中序求后序
#include<iostream>#include<string>using namespace std;/*假设根节点在中序遍历中的位置为pos,树的结点数为len,即 len=inorder.length() 代码:pos = inorder.find(preorder[0]) or pos = inorder.find(postorder[postorder.size()-1]) 先序遍历(NLR), 根节点编号(0), 左子树编号(1~pos), 右子树编号(p原创 2021-07-24 09:36:10 · 114 阅读 · 0 评论 -
数组实现-线性表/链表/串/栈的操作
一维数组进行线性表操作#include <iostream>#include<algorithm>using namespace std;int a[2001],n=0,p=0; //插入数据int input(){ cout<<"请输入需要插入多少个数据:"; int sum=0; cin >>sum; for(int i=n+1;i<=n+sum;i++) { cin>>a[i]; } n=n+原创 2021-07-19 09:44:40 · 146 阅读 · 0 评论 -
递归-汉诺塔问题
当只有2个金盘时, 编号分别为1#和2#1) 1# L -> M 1#暂时放在M柱2) 2# L -> R 这时2#盘上面没有其他金盘, 且R柱是空的, 可以直接移动过去3) 1# M -> R 最后将1#盘移动R柱上的2#盘的上面, 任务完成当有3个金盘时, 编号分别为1#, 2#, 3#1) 1# L -> R \ 为了把最大的3#盘移到R柱2) 2# L -> M |-> 需先把L柱1~2#盘借R柱移到M柱, 记...转载 2021-06-18 09:05:08 · 139 阅读 · 0 评论 -
循环单链表-猴子选大王
#include <cstdlib>#include <iostream>using namespace std; struct MonkeyNode{int num;MonkeyNode *next;}; MonkeyNode *head; // 全局变量 标记头结点MonkeyNode *tail; // 全局变量 标记尾结点 // 根据猴子数量创建环形链表void CreateMonkeyList(int n){ if (n &l.原创 2021-06-18 08:30:23 · 429 阅读 · 0 评论 -
字符串-寻找肇事者问题
#include <iostream>using namespace std; int main(){ char buf[5]; for (int i = 32; i < 100; i++) { itoa(i * i, buf, 10);//itoa函数 if ((buf[0] < buf[1]) && (buf[1] < buf[2]) && (buf[2] < buf[3])) cout.原创 2021-06-04 09:06:09 · 119 阅读 · 0 评论 -
for循环-开关灯问题
#include<stdio.h>int main(){ int n,k; static int data[100]; scanf("%d %d",&n,&k); for(int i = 1;i <= n;i++)//灯的数量 { for(int j = 1;j <= k; j++)//人的个数 { //灯是人的倍数时,改变数组的值。 if(i.原创 2021-06-04 08:55:57 · 448 阅读 · 0 评论 -
递推-分鱼问题
#include <iostream>using namespace std; int main(){ int fish[5]; memset(fish, 0, sizeof(fish)); int n = 6; while (true) { int i; fish[4] = n; // 枚举E看到的鱼数 6, 11, 16, ... 肯定满足 N%5==1 // 递推 逆序迭代法 - 从 6 枚举到 127.原创 2021-05-28 09:10:33 · 112 阅读 · 0 评论