![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法笔记
Vanranrr
这个作者很懒,什么都没留下…
展开
-
算法笔记 全排列next_permutation()
next_permutation()给出一个序列在全排列中的下一个序列#include<stdio.h>#include<algorithm>using namespace std;int main(){ int a[10]={1,2,3}; //a[0]~a[2]之间的序列 需要求解next_permutation do{ printf("%d%d%d\n",a[0],a[1],a[2]); } while(next_permutation(a,a+3))原创 2022-04-08 22:14:34 · 101 阅读 · 0 评论 -
算法笔记 二分查找
二分查找在一个严格递增序列A中找出给定的数x原创 2022-04-08 22:04:31 · 113 阅读 · 0 评论 -
算法笔记 01背包问题
01背包问题#include<cstdio>#include<algoritm>using namespace std;const int maxn = 100; //物品最大件数const int maxv = 1000; //V的上限int w[maxn],c[maxn],dp[maxv];int main(){ int n,V; scanf("%d%d",&n,&V); for(int i=0;i<n;i++) { scan原创 2022-04-08 21:17:18 · 206 阅读 · 1 评论 -
算法笔记 并查集
并查集1、并查集的定义并查集用数组实现int father[N];father[2]=1表示元素2的父亲结点是元素12、并查集的基本操作并查集的使用需要先初始化father数组,然后再根据需要进行查找或合并的操作。(1)初始化for(int i=1;i<=N;i++){ father[i]=i; //令father[i]=-1也可 }(2)查找查找操作:对给定的结点寻找其根结点的过程。实现的方式是递推或是递归递推:int findFather(int x){原创 2022-04-08 21:02:54 · 194 阅读 · 0 评论 -
算法笔记 深度优先搜索(DFS)和广度优先搜索(BFS)
深度优先搜索(DFS)和广度优先搜索(BFS)深度优先搜索(一种枚举所有完整路径以遍历所有情况的搜索方法 )例题:#include<cstdio>const int maxn = 30;int n,V,maxValue = 0; //物品件数n,背包容量V,最大价值maxValueint w[maxn],c[maxn]; //w[i]为每件物品的重量, //DFS ,index为当前处理的物品编号//sumW和sumC分别为当前总重量和当前总价值void DFS(i原创 2022-04-08 17:12:21 · 577 阅读 · 0 评论 -
算法笔记 最短路径
Dijkstra算法的伪代码:用领接矩阵实现Dijkstra算法 P371constint MAXV = 1000; //最大顶点数constint INF = 1000000000; //设INF为一个很大的数int n,G[MAXV][MAXV]; // n为顶点数,MAXV为最大顶点数int d[MAXV]; //起点到大各点的最短路径长度bool vis[MAXV]={false}; //标记数组 vis[i]==true表示已访问。初值均为falsevoid Dijks原创 2022-04-07 22:10:25 · 1752 阅读 · 1 评论 -
算法笔记 最小生成树
最小生成树最小生成树是在一个给定的无向图G(V,E)中求一棵树T,使得这棵树拥有图G中所有顶点,且所有边都是来自图G的边,并且满足整棵树的边权和最小。最小生成树的性质:(1)最小生成树是树,其边数等于顶点数减1,其树内一定不会有环。(2)对给定的图G(V,E),其最小生成树可以不唯一,但其边权之和一定是唯一的。求解最小生成树的两种算法:prim算法和kruskal算法,都采用了贪心法的思想,只是贪心的策略不一样。prim算法 用于稠密图(边多)kruskal算法(克鲁斯卡尔算法)用于稀疏图(边原创 2022-04-07 21:13:43 · 392 阅读 · 0 评论 -
算法笔记 字符串处理:回文串和说反话
#include<cstdio>#include<cstring>const int maxn=256;bool judge(char str[]) //判断字符串str是否是回文串 { int len = strlen(str); //字符串长度 for(int i=0;i<len/2;i++) //i枚举字符串的前一半 { if(str[i]!=str[len-i-1]) { return false; } } ret.原创 2022-04-06 23:29:32 · 112 阅读 · 0 评论 -
算法笔记 日期差值
#include<cstdio>int month[13][2] = { //平年和闰年的每个月的天数 {0,0},{31,31},{28,29},{31,31},{30,30},{31,31},{30,30},{31,31},{30,30},{31,31},{30,30},{31,31},{30,30}};bool isLeap(int year) //判断是否为闰年{ return (year%4==0 && year%100!=0) || (yea.原创 2022-04-06 21:46:21 · 430 阅读 · 0 评论 -
算法笔记 最大公约数、最小公倍数、素数(质数)
求最大公约数 gcd(m,n)#include<cstdio>//求最大公约数的辗转相除法递归写法 int gcd(int a,int b){ if(b==0) return a; else return gcd(b,a%b); //递归边界 gcd(a,0)=a; } int main(){ int m,n; scanf("%d %d",&m,&n); printf("%d\n",gcd(m,n));}求最小公倍数 lcm(a,b)最大公原创 2022-04-06 19:54:52 · 377 阅读 · 0 评论 -
算法笔记 sscanf与sprintf:处理字符串问题的利器
头文件:stdio.hsscanf可理解为:string+scanfsprintf可理解为:string+printf#include<stdio.h>int main(){ int n; char str[100]="123"; sscanf(str,"%d",&n); //把字符数组str中的内容以"%d"的格式写到n中(从左到右) printf("%d\n",n); return 0;}#include<stdio.h>int main()原创 2022-04-05 22:06:31 · 272 阅读 · 0 评论 -
算法笔记 结构体1——候选人
题目描述完成一个对候选人得票的统计程序。假设有3个候选人,名字分别为Li,Zhang和Fun。使用结构体存储每一个候选人的名字和得票数。记录每一张选票的得票人名,输出每个候选人最终的得票数。结构体可以定义成如下的格式:struct person {char name[20];int count;}leader[3] = {“Li”, 0, “Zhang”, 0, “Fun”, 0};#include<iostream> #include<cstring>using n原创 2022-03-21 22:23:29 · 416 阅读 · 0 评论 -
算法笔记 用构造函数对结构体进行初始化
用构造函数对结构体进行初始化构造函数特点:(1)不需要写返回值类型;(2)函数名与结构体名相同。struct studentInfo{ int id; char gender; //默认生成的构造函数 studentInfo(){} //由于这个构造函数存在才可以直接定义studentInfo()类型的变量而不进行初始化 };手动提供id和gender的初始化参数 struct studentInfo{ int id; char gender; // 用以不初始化就定义结构体变原创 2022-03-21 21:53:13 · 566 阅读 · 0 评论 -
算法笔记 指针的指针
C语言#include<stdio.h>#include<string.h>#include<malloc.h>void strswap(char **a,char **b) //二级指针:把指针的地址传递给函数{ char *temp; //交换指针的地址 temp = *a; *a = *b; *b = temp;} //把二级指针指向的指针换成其他指针int main(){ char *a,*b,*c; //存地址,指原创 2022-03-19 19:31:06 · 340 阅读 · 0 评论 -
函数参数的引用型定义
函数返回值类型 函数名(参数定义列表){…}调用方法:函数名(参数列表);int add(int a,int b){ return a+b;}调用:result = add(1,2); void F() //函数所做的事情不需要从参数列表中传入数据,只靠函数本身的功能即可。{ ...}调用:F();错误示范:int result = 0;void getRusult(int r){ ++r;}调用:getResult(result);//只是把result的数原创 2022-03-18 17:54:38 · 1344 阅读 · 0 评论 -
算法笔记 字符串指针
题目描述:给定字符串定义char *a = “I love China!”,读入整数n,输出在进行了a = a + n这个赋值操作以后字符指针a对应的字符串。#include<iostream>using namespace std;int main(){ const char *a = "1 love China!"; // 字符串首地址赋值给指针a const:放在常量区更好 int n; cin>>n; a = a+n; cout<<a&l原创 2022-03-17 23:21:42 · 783 阅读 · 0 评论 -
指针题目1
题目描述:输入a和b两个整数,按先大后小的顺序输出a和b。注意请使用指针变量的方式进行比较和输出。#include<iostream>using namespace std; int main() { int *p,*q; int a,b,c; cin>>a>>b; //不能这样写cin>>*p>>*q; 没初始化,指向未知地方,不能改变它指向的量,否则出现未知的情况 p = &a; q = &b;原创 2022-03-17 21:18:40 · 240 阅读 · 0 评论 -
算法笔记 问题 B: 习题7-7 复制字符串中的元音字母
题目描述:问题 B: 习题7-7 复制字符串中的元音字母#include<stdio.h>#include<string.h>void vowel(char a[],char b[]){ int j=0; int n = strlen(a); for(int i=0;i<n;i++) { if(a[i]=='a'||a[i]=='e'||a[i]=='i'||a[i]=='o'||a[i]=='u'||a[i]=='A'||a[i]=='E'||a[i]=原创 2022-03-17 20:58:00 · 148 阅读 · 0 评论 -
算法笔记 问题 A: 习题7-5 字符串逆序存放
题目描述:写一个函数将一个字符串按反序存放。在主函数中输入一个字符串,通过调用该函数,得到该字符串按反序存放后的字符串,并输出。#include<stdio.h>#include<string.h>void antitone(char a[100]){ char temp; int n = strlen(a); for(int i=0;i<n;i++) { if(i<n/2) { temp = a[n-i-1]; a[n-i-1]原创 2022-03-17 20:16:05 · 113 阅读 · 0 评论 -
算法笔记 问题 J: 例题6-9 字符串求最大值
题目描述:从键盘上输入3个字符串,求出其中最大者。#include<iostream>#include<cmath>#include<cstdio>#include<cstring>using namespace std;int main(){ char a1[100],a2[100],a3[100]; scanf("%s %s %s",a1,a2,a3); int n1=strlen(a1),n2=strlen(a2),n3=strle原创 2022-03-14 22:18:20 · 105 阅读 · 0 评论 -
算法笔记 问题 H: 例题6-3 冒泡排序
题目描述:从键盘上输入10个整数,用冒泡法对这10个数进行排序(由小到大)。#include<iostream>using namespace std;int main(){ int a[10],temp; for(int i=0;i<10;i++) { cin>>a[i]; }/* for(int i=9;i>0;i--) // 控制趟数:n-1趟 { for(int j=0;j<i;j++) //每趟的比较 */ for(i原创 2022-03-14 21:45:21 · 103 阅读 · 0 评论 -
算法笔记 问题 E: 习题6-13 字符串比较
题目描述:比较两个字符串s1和s2的大小,如果s1>s2,则输出一个正数;若s1=s2,则输出0;若s1<s2,则输出一个负数。要求:不用strcpy函数;两个字符串用gets函数读入。例如:“A"与"C"相比,由于"A”<“C”,应输出负数,同时由于"A"与"C"的ASCII码差值为2,因此应输出"-2"。同理:"And"和"Aid"比较,根据第2个字符比较的结果,“n"比"i"大5,因此应该输出"5”#include<stdio.h>#include<st原创 2022-03-14 20:56:33 · 90 阅读 · 0 评论 -
算法笔记 问题 D: 习题6-12 解密
题目描述:有一行电文,已按如下规律译成密码:A–>Z a–>zB–>Y b–>yC–>X c–>x… …即第一个字母变成第26个字母,第i个字母变成第(26-i+1)个字母,非字母字符不变。要求根据密码译回原文,并输出。突破口:发现下图这个关系。#include<iostream>#include<cstring> using namespace std;int m原创 2022-03-14 20:11:33 · 98 阅读 · 0 评论 -
算法笔记 问题 C: 习题6-6 杨辉三角
题目描述:按要求输入如下格式的杨辉三角11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1最多输出10层#include<iostream>using namespace std;int main(){ int a[10][10]; int n; cin>>n; for(int i = 0;i<n;i++) { for(int j=0;j<=i;j++) { if(i==j||j==0) {原创 2022-03-14 10:06:21 · 384 阅读 · 0 评论 -
算法笔记 问题 G: 例题5-7 求圆周率pi的近似值
题目描述:求圆周率PI的近似值,直到发现某一项的绝对值小于10-6为止(该项不累加)。要求输出的结果总宽度占10位,其中小数部分为8位。程序中使用浮点型数据时,请定义为双精度double类型。如果需要计算绝对值,可以使用C语言数学库提供的函数fabs,如求x的绝对值,则为fabs(x).#include<iostream>#include<cmath>using namespace std;int main(){ double PI = 0; int n=0;原创 2022-03-14 09:26:25 · 646 阅读 · 0 评论 -
算法笔记 问题 C: 例题4-3 比较交换3个实数值,并按序输出
题目描述:从键盘输入3个实数a, b, c,通过比较交换,将最小值存储在变量a中,最大值存储在变量c中,中间值存储在变量b中,并按照从小到大的顺序输出这三个数a, b, c。末尾输出换行。思路:先比较第一个数和第二个数,大的放右边,再比较第二个数和第三个数看,大的放右边,这样之后,最右边的数最大。最后再比较第一个数和第二个数。#include<iostream>using namespace std;int main(){ double a,b,c,t; scanf("%lf原创 2022-03-12 16:18:48 · 246 阅读 · 0 评论 -
算法笔记 问题 A: 习题6-4 有序插入
题目描述有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入到数组中。假设数组长度为10,数组中前9个数(这9个数要求从键盘上输入,输入时要满足自小到大的输入顺序)已经按从小到大进行排序。然后再从键盘上输入一个整数,将此整数插入到前有序的9个数中,使得最终的10个数依然是从小到大有序的。突破口:找到哪个数值是可被覆盖的,本题中最初第十个元素a[9]初始化为0,可被覆盖,故j=10时,a[j]=a[j-1]#include<iostream>using namespace原创 2022-03-12 15:33:04 · 444 阅读 · 0 评论