![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
仲夏与贰
这个作者很懒,什么都没留下…
展开
-
二分算法
个人对二分的理解:1.二分是有序的结构上的“遍历”的简化2.二分的“基础”就是用要得到的假设结果,去检测是否符合要求。原创 2021-08-20 21:22:09 · 93 阅读 · 1 评论 -
008 派
原理:二分一个小小的整型传实型(int传double)在控制变量数次后终于才让我给找了出来。一个基础又愚蠢的错误错误代码如下:#include <iostream>#include <math.h>const double PI = 3.141592653589793;const double EPS = 1e-6;using namespace std;double DevidePai(int a[] , int n , int ren , double l原创 2021-08-20 14:56:06 · 134 阅读 · 0 评论 -
006 简单的整数划分问题
该题与郭炜讲的放平果原理一致(若下次所遇有顺序不同即“空盘不同”只需在递归的每步上乘上顺序即可),至于如何相出这个方法这个思维逻辑的,我想大抵是——“正向拆分”不行时就“反向集合”。一般很可能会试着先全在一堆然后拿一个出去然后再拿一个出去,但很明显该方法不足以解出“n个一样的苹果放在n个一样的盘子有多少种放法”的。#include <iostream>using namespace std;int a[51][51] = {0};//动归的储存int NumDevide (int原创 2021-08-18 17:04:03 · 150 阅读 · 0 评论 -
005 Boolean Expressions理解
原理:递归这题让我深刻理解了递归:1.将原问题拆分成更小的问题,这几个小问题的解决方案一致从而降低整个问题分析的难度。2.递归并不一定只有一个函数,当放入一个函数递归特别复杂或操作可能相互冲突时可放入另一函数中。此题如何将表达式拆成更小是关键,若以从左至右则会在各种运算的地方产生矛盾,难以攻克。这也侧面说明,算法如果太难,就一定要换一条思路。括号内是一个表达式,这显而易见,可只抓住它还不够。还要对“普通表达式”(不含括号的)进行计算,而计算过程中“&”和“|”的排序至使计算不能简单的“从左原创 2021-08-17 19:57:13 · 581 阅读 · 0 评论 -
004 2的幂次方表示
原理:递归按题意,先化成2的次方相加再将其个部分指数按同样步骤化后到最小单位表示。一、连接:除以二后的余数和指数部分相加连接二、边界处理:当最后被除数为1时就以其被除次数得出其指数,故需要传递除的次数三、特殊处理:题中特殊形式有2(2),2,2(0)即4,2,1可同时出现在一括号内以加号连接即8(不包含)以下的部分要化成其三相加,即指数也要处理。#include <iostream>using namespace std;void TwoPrint(int num , int原创 2021-08-13 19:42:44 · 97 阅读 · 0 评论 -
003:全排列
原理:递归传递:取出一个后再次调用边界:长度为零时打印该次取用的路径(故需要一字符串储存取用的方式)特殊处理:无;#include <iostream>using namespace std;string S;//(因要循环需要一字符串保存初始状态)string print;//(需要一字符串储存取用的方式)void All(string s){ int max = s.length(); if(max){ for(int i = 0;i &原创 2021-08-13 19:21:53 · 97 阅读 · 0 评论 -
002 拨钟问题
原理:部分遍历确定整体一:建立题目给出操作效果二:遍历前三三:依前三操作456,后得出789因为前三操作完,能动A钟只有4,能动B钟只有5,能动C钟只有6依次确定456,确定完后同理可确定789。根本确定为何是前三,怎么划分部分:有部分确定整体的思想后,在相互牵连影响复杂的情况下,从1开始试,1不行就2,2不行再3。而在上题复杂密码锁中牵连情况过于简单,只会影响两侧所以1就已经解决了问题,若想深入理解,请试试想想“2”,“3”的各种情况会是什么样的效果。故是以牵连复杂程度,一个一个试出来的。原创 2021-08-13 19:04:30 · 139 阅读 · 0 评论 -
001 特殊密码锁
硬解法:遍历一次开始点,从开始点往两端处理。处理方式:“遇到不同就按”最后处理完若和目标一致就为一次有效操作,与之前记录比较得出最小操作数。#include <iostream>using namespace std;char turn(char a);int main(){ string a , b ,temp; cin >> temp >> b; int num = temp.length() , minNum = num原创 2021-08-13 18:28:15 · 85 阅读 · 0 评论