- 博客(54)
- 资源 (5)
- 收藏
- 关注
原创 树的遍历
#include<stdio.h>#include<vector>#include<queue>using namespace std;const int maxn = 100;struct node{ int data; vector<int> child;}Node[maxn]; void PreOrder(int root){ printf("%d", Node[root].data); for(int i = 0; .
2021-02-24 09:28:22 63
原创 二叉树的遍历——还原二叉树
#include<stdio.h>#include<queue>using namespace std;const int maxn = 50;struct node{ int data; node* lchild; node* rchild;};int post[maxn], in[maxn];int n;node* create(int postL, int postR, int inL, int inR){ if(postL > postR.
2021-02-23 10:26:59 107
原创 二叉树的遍历——BFS
void LayerOrder(node* root){ queue<node*> Q; root->layer = 1; Q.push(root); while(!Q.empty()) { node* now = Q.front(); Q.pop(); printf("%d ", now->data); if(now->lchild != NULL) { now->lchild->layer = now->layer .
2021-02-23 09:02:10 92
原创 二叉树的遍历——DFS
先序遍历void preorder(node* root){ if(root == NULL) return; printf("%d\n", root->data); preorder(root->lchild); preorder(root->rchild);}中序遍历void inorder(node* root){ if(root == NULL) return; inorder(root->lchild); printf("%d\n", root.
2021-02-23 08:50:48 461
原创 BFS——走迷宫的最小步数
#include<stdio.h>#include<string.h>#include<queue>using namespace std;const int maxn = 100;struct node{ int x, y; int step;}S, T, Node;int n, m; char maze[maxn][maxn]; // 迷宫信息 bool inq[maxn][maxn] = {false};i..
2021-02-22 10:02:50 237
原创 BFS——求矩阵中“块”的个数
#include<stdio.h>#include<queue>using namespace std;const int maxn = 100;struct node{ int x, y;}Node;int n, m; int matrix[maxn][maxn]; // 01矩阵 bool inq[maxn][maxn] = {false};int X[4] = {0, 0, 1, -1};int Y[4] = {1, -1.
2021-02-22 08:36:24 349
原创 DFS——选数问题
#include<stdio.h>#include<vector> using namespace std;const int maxn = 30;int n, k, x, maxSumSqu = -1, A[maxn];vector<int> temp;vector<int> ans;void DFS(int index, int nowK, int sum, int sumSqu){ if(nowK == k && s.
2021-02-21 10:35:58 175
原创 DFS——背包问题
#include<stdio.h>const int maxn = 30;int n, V, maxValue = 0;int w[maxn], c[maxn];void DFS(int index, int sumW, int sumC){ // 死胡同 if(index == n) return; // 岔路口 —— 不选 DFS(index + 1, sumW, sumC); // 岔路口 —— 选 if(sumW + w[index] <= V).
2021-02-21 09:38:29 134
原创 静态链表——sorting
#include<stdio.h>#include<algorithm>using namespace std;const int maxn = 100005;struct Node{ int address, data, next; bool flag;}node[maxn];bool cmp(Node a, Node b){ if(a.flag == false || b.flag == false) return a.flag > b.flag;.
2021-02-20 11:44:17 96
原创 静态链表——sharing
#include<stdio.h>const int maxn = 100010;struct NODE{ char data; int next; bool flag;}node[maxn]; int main(){ for(int i = 0; i < maxn; i++) { node[i].flag = false; } int s1, s2, n; scanf("%d%d%d", &s1, &s2, &n); int a.
2021-02-20 09:54:20 71
原创 栈与队列的应用——计算表达式的值
#include<iostream>#include<stdio.h>#include<string>#include<stack>#include<queue>#include<map>using namespace std;struct node{ double num; char op; bool flag;};string str;stack<node> s;queue<nod.
2021-02-19 12:05:07 175
转载 将中缀表达式转换为后缀表达式
我们把平时所用的标准四则运算表达式,即“9+(3-1)*3+10/2"叫做中缀表达式。因为所有的运算符号都在两数字的中间,现在我们的问题就是中缀到后缀的转化。 中缀表达式“9+(3-1)*3+10/2”转化为后缀表达式“9 3 1-3*+ 10 2/+” 规则:从左到右遍历中缀表达式的每个数字和符号,若是数字就输出,即成为后缀表达式的一部分;若是符号,则判断其与栈顶符号的优先级,是右括号或优先级低于找顶符号(乘除优先加减)则...
2021-02-19 09:48:34 764
转载 图解后缀表达式的计算过程
为了解释后缀表达式的好处,我们先来看看,计算机如何应用后缀表达式计算出最终的结果20的。 后缀表达式:9 3 1-3*+ 10 2/+ 规则:从左到右遍历表达式的每个数字和符号,遇到是数字就进栈,遇到是符号,就将处于栈顶两个数字出栈,进行运算,运算结果进栈,一直到最终获得结果。 下面是详细的步骤: 1. 初始化一个空栈。此桟用来对要运算的数字进出使用。 2. 后缀表达式中前三个都是数字,所以9、3、1进栈...
2021-02-19 09:18:50 2099
原创 algorithm 头文件下的常用函数
1. max()、min()、abs()2. swap()3. reverse(it, it2)4. next_permutation(a, a + 3)给出一个序列在全排列中的下一个序列。5. fill(a, a + 5, 233)6. sort(a, a + 3, cmp)7. lower_bound(first,last,val)用来寻找在数组或容器的 [ first, last ) 范围内第一个大于等于 val 的元素的位置。如果是数组,返回该位置的指针;如果是容器,返回该位置的迭代
2021-02-18 16:51:44 123
原创 STL——stack 常用函数
1. push()2. top()3. pop()4. empty()5. size()stack 用来模拟实现一些递归,防止程序对栈内存的限制而导致程序运行出错。
2021-02-18 16:09:13 357 1
原创 STL——map 常用函数
1. find(key)返回键为 key 的映射的迭代器#include<stdio.h>#include<map>using namespace std;int main(){ map<char, int> mp; mp['m'] = 20; mp['r'] = 30; mp['a'] = 40; map<char, int>::iterator it = mp.find('a'); printf(
2021-02-18 10:08:52 279
原创 STL—— set 常用函数
set 内的元素自动递增排序,且自动去除了重复元素。set 只能通过迭代器(iterator)访问容器内的元素。1. insert(x)2. find(value)#include<stdio.h>#include<set>using namespace std;int main(){ set<int> st; for(int i = 1; i <= 3; i++) { st.insert(i); } set&l
2021-02-10 13:15:49 197
原创 STL——vector 常用函数
1. push_back(x)#include<stdio.h>#include<vector>using namespace std;int main(){ vector<int> vi; for(int i = 1; i <= 5; i++) { vi.push_back(i); } for(vector<int>::iterator it = vi.begin(); it != vi.end();
2021-02-10 10:27:13 230
原创 数学问题——组合数的计算
#include<stdio.h>const int n = 60;int res[n][n];void calC(){ for(int i = 0; i < n; i++) { res[i][0] = 1; res[i][i] = 1; } for(int i = 2; i < n; i++) { for(int j = 1; j < i; j++) { res[i][j] = res[i - 1][j - 1] + res[i - .
2021-02-10 09:25:38 138
原创 数学问题——大整数减法
#include<stdio.h>#include<string.h>struct bign{ int d[1000]; int len; bign() { memset(d, 0, sizeof(d)); len = 0; }};bign change(char str[]){ bign a; a.len = strlen(str); for(int i = 0; i < a.len; i++) { a.d[i] = str[a..
2021-02-09 11:17:54 71
原创 数学问题——大整数加法
#include<stdio.h>#include<string.h>struct bign{ int d[1000]; int len; bign() { memset(d, 0, sizeof(d)); len = 0; }};bign change(char str[]){ bign a; a.len = strlen(str); for(int i = 0; i < a.len; i++) { a.d[i] = str[a..
2021-02-09 10:58:49 72
原创 数学问题——质因子分解(优化)
#include<stdio.h>#include<math.h>const int maxn = 100010;bool isPrime(int n){ int sqr = (int) sqrt(1.0 * n); for(int i = 2; i < sqr; i++) { if(n % i == 0) return false; } return true;} int prime[maxn], pNum..
2021-02-09 09:49:04 258
原创 数学问题——质因子分解
#include<stdio.h>#include<math.h>const int maxn = 100010;bool isPrime(int n){ int sqr = (int) sqrt(1.0 * n); for(int i = 2; i < sqr; i++) { if(n % i == 0) return false; } return true;} int prime[maxn], pNum .
2021-02-09 09:39:43 167
原创 数学问题——数素数
#include<stdio.h>const int maxn = 1000001;int prime[maxn], num = 0;bool p[maxn] = {0};void Find_Prime(int n){ for(int i = 2; i < maxn; i++) { if(p[i] == false) { prime[num++] = i; if(num >= n) break; for(int j = i + i; j ..
2021-02-08 10:02:13 64
原创 数学问题——素数表的获取(Eratosthenes筛法)
#include<stdio.h>#include<math.h>int prime[101], pNum = 0;bool p[101] = {0};void Find_Prime(){ for(int i = 2; i < 101; i++) { if(p[i] == false) { prime[pNum++] = i; for(int j = i + i; j < 101; j = j + i) { p[j] .
2021-02-08 09:39:22 100
原创 数学问题——素数表的获取
#include<stdio.h>#include<math.h>bool isPrime(int n){ if(n <= 1) return false; int sqr = (int) sqrt(1.0 * n); for(int i = 2; i <= sqr; i++) { if(n % i == 0) return false; } return true;}int prime[101], pNum = 0;bool p[10..
2021-02-08 09:12:04 74
原创 数学问题——分数的表示和化简
#include<stdio.h>#include<math.h>struct Fraction{ int up, down;};int gcd(int a, int b){ if(b == 0) return a; else return gcd(b, a % b);}Fraction reduction(Fraction result){ if(result.down < 0) { result.up = -result.up; re.
2021-02-07 10:56:57 225
原创 数学问题——最小公倍数
#include<stdio.h>int gcd(int a, int b){ if(b == 0) return a; else return gcd(b, a % b);}int main(){ int m, n, d; scanf("%d %d", &m, &n); d = gcd(m, n); printf("%d", (m / d) * n); return 0;}
2021-02-07 09:53:28 77
原创 数学问题——最大公约数(欧几里得算法)
#include<stdio.h>int gcd(int a, int b){ if(b == 0) return a; else return gcd(b, a % b);}int main(){ int m, n; scanf("%d %d", &m, &n); printf("%d", gcd(m, n)); return 0;}
2021-02-07 09:42:59 88
原创 简单数学——数字黑洞
#include<stdio.h>#include<algorithm>using namespace std;bool cmp(int a, int b){ return a > b;}void to_array(int n, int num[]){ for(int i = 0; i < 4; i++) { num[i] = n % 10; n /= 10; }}int to_number(int num[]){ int su.
2021-02-07 09:26:06 182
原创 活用递推——有几个 PAT
#include<stdio.h>#include<string.h>const int maxn = 100010;const int MOD = 1000000007;char str[maxn];int leftNumP[maxn] = {0};int main(){ gets(str); int len = strlen(str); for(int i = 0; i < len; i++) { if(i > 0) leftNumP[i..
2021-02-06 13:39:35 59
原创 two pointers——快速排序
int Partition(int A[], int left, int right){ int temp = A[left]; while(left < right) { while(left < right && A[right] > temp) right--; A[left] = A[right]; while(left < right && A[left] <= temp) left++; A[right] =
2021-02-06 12:06:03 104
原创 two pointers——归并排序
const int maxn = 100;void merge(int A[], int L1, int R1, int L2, int R2){ int i = L1, j = L2; int temp[maxn], index = 0; while(i <= R1 && j <= R2) { if(A[i] <= A[j]) temp[index++] = A[i++]; else temp[index++] = A[j++]; } while(
2021-02-06 11:45:00 50
原创 two pointers——找 M 问题
while(i < j){ if(a[i] + a[j] == M) { printf("%d %d", i, j); i++; j--; } else if(a[i] + a[j] < M) i++; else j--;}
2021-02-06 11:11:31 93
原创 二分——快速幂的递归和迭代求法
递归#include<stdio.h>typedef long long LL;LL binaryPow(LL a, LL b, LL m){ if(b == 0) return 1; if(b % 2 == 1) return a * binaryPow(a, b - 1, m) % m; else{ LL mul = binaryPow(a, b / 2, m); return mul * mul % m; }}迭代#include<stdio.h>
2021-02-05 22:48:23 108
原创 二分法拓展——求根号2近似值
#include<stdio.h>#include<math.h>const double eps = 1e-5;double f(double x){ return x * x;}double calSqrt(){ double left = 1, right = 2, mid; while(right - left > eps) { mid = (left + right) / 2; if(f(mid) > 2) right = mid;
2021-02-05 21:39:26 2132
原创 二分——二分查找(存在重复元素)
#include<stdio.h>int lower_bound(int A[], int left, int right, int x){ // 找第一个大于等于 x 的位置 int mid; while(left < right) { mid = (left + right) / 2; if(A[mid] >= x) right = mid; else left = mid + 1; } return left;}int upper_boun.
2021-02-05 11:50:27 428
原创 二分——二分查找(不存在重复元素)
#include<stdio.h>int binarySearch(int A[], int left, int right, int x){ int mid; while(left <= right) { mid = (left + right) / 2; if(A[mid] == x) return mid; else if(A[mid] > x) right = mid - 1; else left = mid + 1; } retur
2021-02-05 10:34:12 294
上机实验 100分.rar
2020-11-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人