PAT&算法
迪加不会飞
again again again
展开
-
2020-08-14 基于栈进行简单四则运算(带括号)
前言:本例程参考 《数据结构 C语言》版本内 表达式求值一例对于堆栈进行深入研究,后续由于进行重复计算,改用 vector 作为容器但在思维上依旧采用栈先入后出。核心就是通过当前符号与前一符号进行权重比较,选择计算,消去括号或则只写入符号不运算的方式。改进点:1 原先将 前符号位 ) 都需进行运算,这样 )+ 这类实际是有问题改为 < 只填写符号2 进入 _third 值用于处理 )+2# 这种情况,这是不需要计算的3 一次计算完成之后通过字符拼接重新构成一个字符串,思维通 拆解计算类似也原创 2020-08-14 13:49:29 · 247 阅读 · 0 评论 -
20200617-01 二分检索算法
二分法:1 对象一定是个有序数列2 根据排序类型不同,需要修改比较值从名字就可以知道,就是对半分,不断对半分假设检索 5 从 123456第一次:min = 0 max = 5 mid = 23 > 5 ? 小=> min = 3, max = 5, mid = 4第二次min = 3, max = 5, mid = 45 == 5 输出 4123456 mid =(max+min)/2 min = 0 max = 5int search_binary(int arra原创 2020-06-17 11:05:35 · 105 阅读 · 0 评论 -
20200615-01 插入排序算法
原理讲解插入排序的核心思维,就是将值依次与已经排序好的数组进行比较找到自己的位置思路上与链表插入相似步骤解释:待排序数组 [8, 2, 5, 5, 1] 升序排列0: 不需要比较跳过1: 2 < 8 Yes 交换 [2] 8 5 5 12: 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 · 140 阅读 · 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 · 144 阅读 · 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 · 182 阅读 · 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 · 124 阅读 · 0 评论 -
20200613-02 算法集合-冒泡法
算法讲解写这个系列的初衷就是网上源码质量参差不齐,我能保证的是个人上传代码都经过程序验证,当然有可能存在不正确的地方,欢迎斧正,第一时间修改,谢谢冒泡法,可以理解为像个泡泡一样上浮,我们需要的东西上浮,不需要的东西下沉,不断进行两两相互比较,满足条件则交互两个数据之间的位置举例: 22 11 3 5 99 29 我们需要升序(从小到大排列) array[i] > array[i+1]第一次: 22 11 3 5 99 29i:0 22 > 11 交换 11 22 3 5 99 29i原创 2020-06-13 11:43:48 · 119 阅读 · 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 · 136 阅读 · 0 评论