![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
PAT&算法
迪加不会飞
again again again
展开
-
2020-08-14 基于栈进行简单四则运算(带括号)
前言: 本例程参考 《数据结构 C语言》版本内 表达式求值一例对于堆栈进行深入研究,后续由于进行重复计算,改用 vector 作为容器但在思维上依旧采用栈先入后出。 核心就是通过当前符号与前一符号进行权重比较,选择计算,消去括号或则只写入符号不运算的方式。 改进点: 1 原先将 前符号位 ) 都需进行运算,这样 )+ 这类实际是有问题改为 < 只填写符号 2 进入 _third 值用于处理 )+2# 这种情况,这是不需要计算的 3 一次计算完成之后通过字符拼接重新构成一个字符串,思维通 拆解计算类似也原创 2020-08-14 13:49:29 · 204 阅读 · 0 评论 -
20200617-01 二分检索算法
二分法: 1 对象一定是个有序数列 2 根据排序类型不同,需要修改比较值 从名字就可以知道,就是对半分,不断对半分 假设检索 5 从 123456 第一次: min = 0 max = 5 mid = 2 3 > 5 ? 小=> min = 3, max = 5, mid = 4 第二次 min = 3, max = 5, mid = 4 5 == 5 输出 4 123456 mid =(max+min)/2 min = 0 max = 5 int search_binary(int arra原创 2020-06-17 11:05:35 · 93 阅读 · 0 评论 -
20200615-01 插入排序算法
原理讲解 插入排序的核心思维,就是将值依次与已经排序好的数组进行比较找到自己的位置 思路上与链表插入相似 步骤解释: 待排序数组 [8, 2, 5, 5, 1] 升序排列 0: 不需要比较跳过 1: 2 < 8 Yes 交换 [2] 8 5 5 1 2: 5 < 8 Yes 交换 [2 5] 8 5 1; 2 < 5 No 结束 3: 5 < 8 Yes 交换 [2 5 5] 8 1; 2 < 5 No 结束 4: 1 < 5 Yes 交换 2 5 5 1 8; 1原创 2020-06-15 11:00:58 · 128 阅读 · 0 评论 -
20200613-04 PAT 甲级试题 03 List Grades
思路讲解 本题的核心在于排序(降序) 所以可以选用比较常见的几种排序算法,如冒泡,快排,插入,选择等等 快速排序详解 冒泡法详解 这里选用递归类型的快速排序法,具体详细看代码 源码 #include <cstdio> #include <cmath> #include <cstring> #include <vector> #include <tuple> #include <iostream> using namespace s原创 2020-06-13 17:30:26 · 133 阅读 · 0 评论 -
20200613-03 快速排序 递归和非递归两种方式
算法原理 简单说来,就是分而治之,现在随意取一个值作为基准对照值, 1 从右往左,直到遇到第一个大于对照值的,与对照值交换位置 2 从左往右,直到遇到第一个小于对照值的,与对照值交换位置 3 重复 1/2 步骤,直到左右指针相遇,退出 4 从相遇位置为分割线,将两个数组重复进行 1/2/3 步骤,直到全部都结束 递归方式排序 eg 数组: 6 8 2 9 33 2 3 第一次: 取左侧第一个值为对照值 (tmp = array[p_tmp])tmp = 6 p_tmp = 0 (tmp 所在位置指针) 右边原创 2020-06-13 17:02:54 · 152 阅读 · 0 评论 -
20200613-01 PAT 甲级试题 02 Read Number in Chinese
思路讲解 核心一: 数值的分解 1.1 大单位分解 因为需要添加 “Yi" 和 " Wan” 两个单位,所以我的思路第一步是将其拆解成 3 个部分 //这里使用的是 C++ 所以单位转化规范一点比较好 int num_array[] = {static_cast<int>(n/100000000), //亿 static_cast<int>(n % 100000000 / 10000), //万 sta原创 2020-06-13 12:06:47 · 111 阅读 · 0 评论 -
20200613-02 算法集合-冒泡法
算法讲解 写这个系列的初衷就是网上源码质量参差不齐,我能保证的是个人上传代码都经过程序验证,当然有可能存在不正确的地方,欢迎斧正,第一时间修改,谢谢 冒泡法,可以理解为像个泡泡一样上浮,我们需要的东西上浮,不需要的东西下沉,不断进行两两相互比较,满足条件则交互两个数据之间的位置 举例: 22 11 3 5 99 29 我们需要升序(从小到大排列) array[i] > array[i+1] 第一次: 22 11 3 5 99 29 i:0 22 > 11 交换 11 22 3 5 99 29 i原创 2020-06-13 11:43:48 · 106 阅读 · 0 评论 -
20200612-01 PAT 甲级试题 01 Rational Sum
一、解析 1.1 核心算法 从题目来看,核心就是计算最大公因数,通过资料可知有两种方式能够计算出结果 方式一:辗转相除法 (欧几里德算法) 方式二:更相减损法 (《九章算术》的一种求最大公约数的算法) 方式三:辗转相减法 (尼考曼彻斯法) 这里由比较详细的图文解说,如果不是很清楚可以查看一下 1.2 实现 这里选择比较熟悉的辗转相除 int find_com(int a, int b) { int max; while(b) { max = a % b; a = b; b = max;原创 2020-06-12 15:08:01 · 121 阅读 · 0 评论