- 博客(31)
- 资源 (2)
- 问答 (2)
- 收藏
- 关注
原创 DFS1205素数环(STL队列,栈,DFS,递归)算法
素数环:只能被1和自己整除的数,1不是素数,2是最小的素数素数环是指将从1到n这n个整数围成一个圆环,若其中任意2个相邻的数字相加,结果均为素数,那么这个环就成为素数环(比如1 2 3 4,1 6 5 2 3 4)要求:输出所有素数环提示:用到表和队列,如果n为奇数,不构成素数环样列Input6Output1 4 3 2 5 64 3 2 5 6 13 2 5 6 1 42 5 6 1 4 35 6 1 4 3 26 1 4 3 2 51 6 5 2 3 46 5 2 3 4
2021-04-25 01:13:04 1148 3
原创 BF与KMP算法的写法与计算其遍历次数
BF和KMP算法BF相当于一种暴力枚举,是手中没有地图的旅客而KMP则会是手中有地图,看地图走的旅客1. 效率分析给定主串和模式串,分别统计模式匹配的BF算法和KMP算法的比较次数。如主串为S=aaaaaaaaaa ,模式串为T=aaaabBF比较次数为 34KMP比较次数为 16如主串为S=cdbbacc ,模式串为T=abcdBF比较次数为 8KMP比较次数为 8KMP这个算法,理解了以后你会发现,都是脑子,为啥这么不同呢????????????2.BF代码int BF(
2021-04-21 08:44:58 3499 8
原创 最长公共子序列(LCS)
**动态规划都是从最小状态到最大状态的过程,我们可以先匹配两个字符串的一个字符,再到两个字符,三个字符。。。我们可以使用二维数组去装 字符串a的下标0到下标i 和 字符串a的下标0到下标j 之间的公共子序列的最大值值得注意的是下标i与下标j指0到该下标而不是单单此下标例如abbbbbbb 与 acccccc当i = 0,b = 6;则是a 与 acccccc匹配,结果为一,那么当i=1时,ab与acccccc匹配则取决于 a与acccccc和 ac与accccc 画个二维表就理解了而自小而大
2021-11-26 09:39:52 364 2
原创 传教士与野人过河问题
分析过河时,河的一岸减少,另一岸相应增加只有五种过河情况,我们按照限制条件和目的情况已经分情况递归即可DFS时,我们要弄清有哪些限制条件 , 我们的目的 ,以及过程的情况来编写递归:限制条件:无论在哪一岸,必须满足野人数小于等于传教士人数才能避免吃人情况人数不论哪一人种哪一岸都不能超过初始人数,不能小于0目的:河对岸的野人数等于初始野人人数河对岸的传教士人数等于初始传教士人数过程情况:只有五种过河情况:1.一个野人过河2.一个传教士过河3.一个传教士一个野人过河4.两个传教士
2021-11-18 23:20:00 2821
原创 Dijkstra 单源最短路径的实现
最主要的地方就是使用一个数组记录当前到达各点各权值,并不断在访问新点时利用这个已记录的值不断更新已经访问过的点要立Flag 处理掉int n, int m, int **Map, bool Path[], int Pre[], int start分别是:点数量,边数量,边权,访问状态,前点,起始点注释很详细,本文章主要是实现,如果不理解建议看b站的视频理解一下以下是代码,注意看注释#include <bits/stdc++.h>using namespace std;void
2021-11-14 18:19:17 648 1
原创 POJ1001 求高精度幂 (分治高精度大数相乘)
总体思路:高精度大数乘法需要记录小数点位置 需要使用大数相乘只是考验能否使用大数相乘有几个特判也需要注意,其他没什么POJ使用to_string 过不了也不知道为啥必须手写 POJ使用stoi过不了也不知道为啥必须手写 POJ不能使用万能头文件 注意去除前后的0 另外java有大数类,可以直接得到结果
2021-11-13 21:41:50 475 2
原创 快速排序图解(递归,栈两种实现)
牢记我们的目的是把基准数左边变成都比基准数小,右边变成都比基准数大非常详细的图解与注释,递归与栈两种方法实现
2021-10-12 08:00:00 1405 6
原创 整数转换英文表示
解题思路我们知道,每三位会出现一个千级以上单位,每三个间有个,百,十单位,则可以按照num%1000 ,每三位数模拟,三位数后若num>0,则可以使用栈保存新进制(千,百万…)而此单位用一个长度len保存即可代码class Solution{public: string numberToWords(int num) {if(num==0)return "Zero"; int len = 2,p1,p2,p3,p4,p5,p6,p7,p8; stack<str
2021-10-11 20:58:17 77 1
原创 1893. 检查是否区域内所有整数都被覆盖
代码class Solution { public boolean isCovered(int[][] ranges, int left, int right) {while(left<=right){ boolean hh= false; for(int [] res : ranges) { if(res[0]<=left&&left<=res[1]) {
2021-07-23 13:05:22 87 1
原创 L1-033出生年
#include <bits/stdc++.h>using namespace std;int main(){ int years,nums; cin>>years>>nums; int n[4]; int count =0,i=0; for(i=years;;i++) { count =1; n[0]=i/1000; n[1]=i/100-n[0]*10; n[2]=i/10-n[0]*
2021-07-07 18:51:49 75
原创 L1-027 出租 (20 分)
1. 题目题目链接2.思考map+set3.代码#include <bits/stdc++.h>#include<bits/stdc++.h>using namespace std;int main(){ set<int,greater<int>> st; string nums; int *arr=new int [1000],n=0; cin>>nums; for(int i:nums) st.insert(i
2021-07-01 20:14:30 77 1
原创 L1-019 谁先倒 (15 分)
#include <bits/stdc++.h>using namespace std;int main(){ int a=0,b=0; cin>>a>>b; int a1=a,b1=b; int N=0; cin>>N; int aS=0,aA=0,bS=0,bA=0; int temp=0; for(int i=0;i<N;i++) {cin>>aS>>aA>>bS>
2021-06-29 19:29:10 77
原创 L1-017 到底有多二 (15 分)题目及题解
题目链接:L1-017 到底有多二 (15 分)#include<bits/stdc++.h>using namespace std;int main(){ string N; cin>>N; double res=0,negative=1,even=1; double lens = N.size(); for(char s :N) if(s=='2')res++;if((N[lens-1]-48)%2==0)even=2; if(N[0]=
2021-06-28 19:44:04 99
原创 map 检测身份证
题解一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值:Z:0 1 2 3 4 5 6 7 8 9 10M:1 0 X 9 8 7 6 5 4 3 2现在给定一些身份证号码,请你验证校验码的有效性,并输出有问题的号码。输入格式:输入第一行给出正整数N(≤100)是输入
2021-06-28 19:18:26 108 1
原创 1769. 移动所有球到每个盒子所需的最小操作数
1769. 移动所有球到每个盒子所需的最小操作数1.题目2.思路3.代码1.题目移动所有球到每个盒子所需的最小操作数有 n 个盒子。给你一个长度为 n 的二进制字符串 boxes ,其中 boxes[i] 的值为 ‘0’ 表示第 i 个盒子是 空 的,而 boxes[i] 的值为 ‘1’ 表示盒子里有 一个 小球。在一步操作中,你可以将 一个 小球从某个盒子移动到一个与之相邻的盒子中。第 i 个盒子和第 j 个盒子相邻需满足 abs(i - j) == 1 。注意,操作执行后,某些盒子中可能会存
2021-06-23 09:41:49 91 1
原创 循环赛日历表(递归与非递归)
目录1.题目要求2.样例3.非递归4.递归1.题目要求设有n(n为2的k次幂)个运动员参加网球循环赛,现设计一个比赛日程表,要求:(1)每个选手必须与其他n-1个选手各赛一次(2)每个选手一天只能比赛一次(3)循环赛一共进行n-1天2.样例Input3Output1 2 3 4 5 6 7 82 1 4 3 6 5 8 73 4 1 2 7 8 5 64 3 2 1 8 7 6 55 6 7 8 1 2 3 46 5 8 7 2 1 4 37 8 5 6 3 4 1 28
2021-05-24 08:53:38 207 3
原创 子串查找(查找字串出现次数)
**给定一个字符串AA和一个字符串BB,求BB在AA中的出现次数。AA和BB中的字符均为英语大写字母或小写字母。 AA中不同位置出现的BB可重叠。 Input输入共两行,分别是字符串AA和字符串BB 。Output输出一个整数,表示BB在AA中的出现次数。Sample Input 1zyzyzyzzyzSample Output 13**1≤A,B的长度≤10^6,AA、BB仅包含大小写字母。时间要求500ms```cpp#include<bits/stdc++.h&.
2021-05-12 22:30:48 1482 3
原创 表达式求值(含括号的复杂运算)
#include<iostream>#include<algorithm>#include<string>#include<stack>using namespace std;int priority(int x, char ch, int y)//判断字符为什么运算符,两个数字计算 并返回{ switch (ch) { case '+': return x + y; break; c
2021-05-11 18:35:57 628 3
原创 矩阵乘法(matrix multiplication)
什么叫矩阵第一行三个正整数 nn、pp、mm,表示矩阵的长宽。之后的nn行,每行pp个整数,表示矩阵AA。之后的pp行,每行mm个整数,表示矩阵BB。Output输出nn行,每行mm个整数,表示矩阵A \times BA×B,每个数模10^9 + 7输出。图示样例Sample Input 13 4 5-2 -8 -9 8-10 0 6 -8-10 -6 6 94 -7 5 -5 910 -2 -10 5 5-3 -7 -3 8 -2-6 7 7 3 -2Sample Ou
2021-05-11 01:04:54 3559 3
原创 魔方阵(各幻方)
1.什么叫幻方所谓幻方,就是一个n行n列的正方形,共有n2个格子,将1、2、3、……、n2这些数字放到这些格子里,使其每行的和、每列的和及两条对角线的和都是一个相同的数S,S称为幻和。当n为奇数时,称为奇数阶幻方,当n为偶数时,称为偶阶幻方。当n可被4整除时,称方为双偶幻方。当n不可被4整除时,称为单偶幻方。2.奇幻方解法奇魔方(阶数n = 2 * m + 1,m =1,2,3……)规律如下:数字1位于方阵中的第一行中间一列;数字a(1 < a ≤ n2)所在行数比a-1行数少1,若a-1
2021-05-06 00:20:24 1902 4
原创 一元多项式求和
利用单链表实现两个一元多项式的加法操作要求:每个多项式按照指数升幂的形式表示*提示:1、相同指数幂的系数和为零不存储2、每个多项式的输入要求先输入项数,然后分别给出系数和对应的指数Input5 3 0 4 1 7 8 2 18 1 303 5 1 6 3 -7 8Output3.0 0 9.0 1 6.0 3 2.0 18 1.0 30 *#include<bits/stdc++.h>using namespace std;struct Node{ int XS
2021-04-23 19:39:53 232
原创 1201STL应用(血型组合问题)
关于map,set,vector,集中嵌套与遍历使用及其概况分析的综合性问题,很不错,适合新手用来熟练上述的使用
2021-04-20 17:01:06 516 8
原创 利用队列进行两位数排序
利用队列进行两位数排序直接上代码:#include<bits/stdc++.h>using namespace std;int main(){int data[100],n=0;while(1){cin>>data[n];if(data[n]==0)break;n++;}queue que[10];for(int i=0;i<2;i++)//两位数;{ int temp,l;//以下分类进入队列for(int j=0;j<n;
2021-04-19 23:07:56 256 1
TA创建的收藏夹 TA关注的收藏夹
TA关注的人