![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++
HanYQ_NWUer
这个作者很懒,什么都没留下…
展开
-
c++泛型编程(二)运算符重载
为什么要运算符重载c++预先定义的运算符操作都基于基本运算符操作,而用户自定义数据类型也希望有这样的操作,这时就需要进行运算符重载,这也是c++的扩展性。运算符重载时通过运算符重载函数来实现的结构(<返回类型说明>)operator(运算符重载符号)(<参数列表>){函数体}运算符重载需要遵循的规则1,、除了类属关系符“.”、成员指针运算符“.*”、作用域...原创 2020-02-23 14:29:10 · 763 阅读 · 0 评论 -
c++泛型编程(一)模板
什么是模板1、模板是c++的一种特性,允许类或者函数可以泛型形式运行2、模板可以使类或者函数在不同类型下运行,无需为每一种类型都编写代码3、模板是一种复用的手段什么是函数模板函数模板是建立一个通用的函数,他的形参、返回类型和局部变量都用一个占位符来表示,等到真正调用时,根据传入的参数逆推出真正的类型。什么是类模板c++不仅支持函数模板,也支持类模板。函数模板不仅可以用在函数声明中,也...原创 2020-02-19 15:38:26 · 125 阅读 · 0 评论 -
STL学习:为包含指针的关联容器指定比较类型
假设建立一个包含Sting*指针的set#include<iostream>#include<algorithm>#include<string>#include<set>using namespace std;int main(){ set<string*> sp; sp.insert(new string("A"))...原创 2019-05-18 10:36:30 · 123 阅读 · 0 评论 -
BitMap类(c++实现)
首先通过一道题来理解什么是BitMap题目:我有40亿个整数,再给一个新的整数,我需要判断新的整数是否在40亿个整数中,你会怎么做?分析:假设一个int占用4个字节(32位),40个亿的话就是160亿个字节,大概相当于16GB,假设一台计算机只有2G内存,那么16G一次是加载不完的,要分8次加载,从磁盘加载数据是磁盘io操作,是非常慢的(比内存中的操作要慢百倍),每次加载这么大的数据,还要8次...原创 2019-05-23 12:48:23 · 992 阅读 · 0 评论 -
51nod 1050 循环数组的最大字段和(c++实现)
N个整数组成的循环序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的连续的子段和的最大值(循环序列是指n个数围成一个圈,因此需要考虑a[n-1],a[n],a[1],a[2]这样的序列)。当所给的整数均为负数时和为0。例如:-2,11,-4,13,-5,-2,和最大的子段为:11,-4,13。和为20。收起输入第1行:整数序列的长度N(2 &l...原创 2019-05-30 11:32:09 · 177 阅读 · 0 评论 -
6大基本排序排序算法总结(附c++代码实现)
**1、选择排序过程简单描述:首先,找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置(如果第一个元素就是最小元素那么它就和自己交换)。其次,在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置。如此往复,直到将整个数组排序。这种方法我们称之为选择排序。#include<iostream>#include<algorithm>using na...原创 2019-05-23 22:57:32 · 151 阅读 · 0 评论 -
51nod 2006 飞行员配对(二分图最大匹配)(c++实现)
第二次世界大战时期,英国皇家空军从沦陷国征募了大量外籍飞行员。由皇家空军派出的每一架飞机都需要配备在航行技能和语言上能互相配合的2名飞行员,其中1名是英国飞行员,另1名是外籍飞行员。在众多的飞行员中,每一名外籍飞行员都可以与其他若干名英国飞行员很好地配合。如何选择配对飞行的飞行员才能使一次派出最多的飞机。对于给定的外籍飞行员与英国飞行员的配合情况,试设计一个算法找出最佳飞行员配对方案,使皇家空 军...原创 2019-05-28 16:28:03 · 198 阅读 · 0 评论 -
51nod 1119 机器人走方格V2
M * N的方格,一个机器人从左上走到右下,只能向右或向下走。有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10^9 + 7的结果。收起输入第1行,2个数M,N,中间用空格隔开。(2 <= m,n <= 1000000)输出输出走法的数量 Mod 10^9 + 7。输入样例2 3输出样例3题目传送门刚开始考虑从左上角走到右下角每走一步下一步共有两种选...原创 2019-06-05 22:31:31 · 135 阅读 · 0 评论 -
51nod 2517 最少01翻转次数(c++实现)
小b有一个01序列,她每次可以翻转一个元素,即将该元素异或上1。现在她希望序列不降,求最少翻转次数。收起输入第一行输入一个数n,其中1≤n≤20000;第二行输入一个由‘0’和‘1’组成的字符串输出输出一个非负整数,表示翻转次数输入样例6010110输出样例2在刚开始做这道题时,看到“序列不降“”想到的是找到第一个为1的字符,然后将后面为0的字符翻转为1,这种方法可以得到...原创 2019-05-29 19:44:41 · 882 阅读 · 0 评论 -
51nod1095 Anigram单词(c++)
一个单词a如果通过交换单词中字母的顺序可以得到另外的单词b,那么定义b是a的Anigram,例如单词army和mary互为Anigram。另:相同的2个单词不算Anigram。现在给定一个字典,输入Q个单词,从给出的字典中找出这些单词的Anigram。收起输入第1行:1个数N,表示字典中单词的数量。(1 <= N <= 10000)第2 - N + 1行,字典中的单词,单词长度...原创 2019-06-09 11:15:30 · 329 阅读 · 0 评论 -
51nod 骨牌覆盖(c++实现)
在2N的一个长方形方格中,用一个12的骨牌排满方格。问有多少种不同的排列方法。例如:2 * 3的方格,共有3种不同的排法。(由于方案的数量巨大,只输出 Mod 10^9 + 7 的结果)输入输入N(N <= 1000)输出输出数量 Mod 10^9 + 7输入样例3输出样例3思路总结:考虑在2N的长方形中,用12的骨牌铺满方格,首先考虑N=1,只有竖着放一种方式f(1...原创 2019-06-04 12:52:18 · 845 阅读 · 0 评论 -
动态规划篇——最长公共子序列(c++)
引言:最长公共子序列属于动态规划的基础篇,由字符串的最长公共最序列可以引出很多的问题。最长子序列详细讲解以及练习题目需要详细讲解教程的可以观看上面链接的文章,以下是自己做的简单的概括。一、何为最长公共子序列A和B的公共子序列中长度最长的(包含元素最多的)叫做A和B的公共子序列。仍然用序列1,3,5,4,2,6,8,7和序列1,4,8,6,7,5它们的最长公共子序列是:1,4,8,7...原创 2019-06-11 17:28:51 · 14483 阅读 · 0 评论 -
51nod - 1092 回文字符串(c++)
回文串是指aba、abba、cccbccc、aaaa这种左右对称的字符串。每个字符串都可以通过向中间添加一些字符,使之变为回文字符串。例如:abbc 添加2个字符可以变为 acbbca,也可以添加3个变为 abbcbba。方案1只需要添加2个字符,是所有方案中添加字符数量最少的。收起输入输入一个字符串Str,Str的长度 <= 1000。输出输出最少添加多少个字符可以使之变为回文...原创 2019-06-11 17:39:42 · 226 阅读 · 0 评论 -
数据结构:单链表(c++继承和复合的形式实现)
#include<iostream>using namespace std;class node{public: int data; node *next; node(int d=0,node *temp=NULL):data(d),next(temp) {}};class nodelist :public node{protected: node *head...原创 2019-05-18 09:46:26 · 468 阅读 · 0 评论 -
51nod1396 还是01串
给定一个0-1串s,长度为n,下标从0开始,求一个位置k,满足0<=k<=n, 并且子串s[0…k - 1]中的0的个数与子串s[k…n - 1]中1的个数相等。 注意:(1) 如果k = 0, s[0…k - 1]视为空串(2) 如果k = n, s[k…n - 1]视为空串(3) 如果存在多个k值,输处任何一个都可以(4) 如果不存在这样的k值,请输出-1收起输入就一...原创 2019-05-27 09:17:15 · 104 阅读 · 0 评论 -
每日一道算法题:大数乘法(c++实现)
题目描述:给出2个大整数A,B,计算A*B的结果#include<iostream>#include<algorithm>#include<cmath>#include<string.h>char s[1001],k[1001];int a[1001],b[1001],c[1001],d[1001]={0};int len1,len2;...原创 2019-03-23 14:40:45 · 303 阅读 · 0 评论 -
每日一道算法题:约瑟夫环(c++)实现
问题描述:N个人坐成一个圆环(编号为1 - N),从第1个人开始报数,数到K的人出列,后面的人重新从1开始报数。问最后剩下的人的编号。例如:N = 3,K = 2。2号先出列,然后是1号,最后剩下的是3号。最直接的方法是暴力枚举法,第一一个标志数组label[n],初始化为0,当label[i]等于1时表示对应编号为i的人已经出列,直到最后一个人出列。部分代码如下:(程序中将编号设定为0~n...原创 2019-03-26 21:32:32 · 640 阅读 · 0 评论 -
最大公约数(优化算法)
先看看暴力枚举法求最大公约数、最小公倍数#include<iostream>#include<algorithm>using namespace std;int main(){ long long n1,n2; cin>>n1>>n2; long long _min=min(n1,n2),i; for( i=2;i<=_min...原创 2019-04-05 22:19:50 · 982 阅读 · 0 评论 -
最小公倍数
最小公倍数的优化算法思想为:最小公倍数等于两数之积除以最大公约数#include<iostream>#include<algorithm>using namespace std;main(){ long long a,b; cin>>a>>b; int max1=max(a,b); int other=a+b-max1; l...原创 2019-04-06 11:43:53 · 221 阅读 · 0 评论 -
51nod 最大公约数之和
给出一个n,求1-n这n个数,同n的最大公约数的和。比如:n = 61,2,3,4,5,6 同6的最大公约数分别为1,2,3,2,1,6,加在一起 = 15收起输入1个数N(N <= 10^9)输出公约数之和输入样例6输出样例15基本思路:与N的最大公约数,肯定是N的因子,求最大公约式之和,及求因子x对和的贡献(与N最大公约数为x的个数)及GCD(k,n)=x,k的个数...原创 2019-04-11 10:34:32 · 381 阅读 · 0 评论 -
c++学习心得:STL初学(基础篇)
标准函数库(STL)学习心得(基础篇)STL主要由两种组件构成:一是容器,包括vector、list、set、map等类;另一种组件是用以操作这些容器的所谓的泛型算法包括find()、sort()等。容器又分为两种:1、顺序型容器:vector和list,顺序型容器会依次遍历第一个、第二个、·········、直到最后一个元素,我们在顺序型容器主要进行迭代(iterate)操作2、关联容器...原创 2019-03-28 17:22:28 · 559 阅读 · 0 评论 -
51nod 3个数和为0
给出一个长度为N的无序数组,数组中的元素为整数,有正有负包括0,并互不相等。从中找出所有和 = 0的3个数的组合。如果没有这样的组合,输出No Solution。如果有多个,按照3个数中最小的数从小到大排序,如果最小的数相等则按照第二小的数排序。#include<iostream>#include<stdlib.h>#include<algorithm>...原创 2019-04-08 20:45:27 · 149 阅读 · 0 评论 -
51nod 最大的最大公约数
给出N个正整数,找出N个数两两之间最大公约数的最大值。例如:N = 4,4个数为:9 15 25 16,两两之间最大公约数的最大值是15同25的最大公约数5。收起输入第1行:一个数N,表示输入正整数的数量。(2 <= N <= 50000)第2 - N + 1行:每行1个数,对应输入的正整数.(1 <= S[i] <= 1000000)输出输出两两之间最大公约数...原创 2019-04-09 17:06:08 · 145 阅读 · 0 评论 -
中国剩余定理(c++)
一个正整数K,给出K Mod 一些质数的结果,求符合条件的最小的K。例如,K % 2 = 1, K % 3 = 2, K % 5 = 3。符合条件的最小的K = 23。收起输入第1行:1个数N表示后面输入的质数及模的数量。(2 <= N <= 10)第2 - N + 1行,每行2个数P和M,中间用空格分隔,P是质数,M是K % P的结果。(2 <= P <= 100...原创 2019-04-09 21:04:58 · 2074 阅读 · 1 评论 -
STL学习笔记:考虑用排序的vector代替关联容器
考虑用排序的vector代替关联容器,原因是关联容器通常被实现为平衡的二叉查找树,那么现在假设有一个关联容器存放Widget对象,那么这里面每一个节点都会存在一个Widget对象,还包含几个指针,通常有一个左指针、右指针还有一个父指针指向它上一个节点,这意味着关联容器存储一个节点需要大量的内存开销,假设一个Widget对象大小为12个字节,指针的大小为4个字节,那么在一个可以容纳4k(4096)个...原创 2019-05-20 20:20:43 · 164 阅读 · 0 评论 -
51nod2486-小b和矩阵(顺时针螺旋访问矩阵)
题目:小b有一个m行n列的矩阵。她会从(1,1)开始,顺时针螺旋访问该矩阵,每个元素恰好被访问一次。请你按小b的访问顺序输出每个元素。收起输入第一行输入两个数m和n,其中0<m,n≤500;之后m行,每行n个数以空格隔开,表示这个矩阵。输出输出一行共m*n个数,表示螺旋输出的结果输入样例3 41 2 3 45 6 7 89 10 11 12输出样例1 2 3 4 8 ...原创 2019-05-26 00:34:22 · 230 阅读 · 0 评论 -
51nod1010 只包含因子2 3 5的数
题目K的因子中只包含2 3 5。满足条件的前10个数是:2,3,4,5,6,8,9,10,12,15。所有这样的K组成了一个序列S,现在给出一个数n,求S中 >= 给定数的最小的数。例如:n = 13,S中 >= 13的最小的数是15,所以输出15。收起输入第1行:一个数T,表示后面用作输入测试的数的数量。(1 <= T <= 10000)第2 - T + 1...原创 2019-05-26 15:06:49 · 141 阅读 · 0 评论 -
51nod:数字0-9的数量(c++算法)
题目描述:给出一段区间a-b,统计这个区间内0-9出现的次数。比如 10-19,1出现11次(10,11,12,13,14,15,16,17,18,19,其中11包括2个1),其余数字各出现1次。**问题看起来并不是很难,最简单的方法是从1开始遍历到N,将其中每一个数的位数中各含有的数加起来,自然就得到了从1-N各个数的和。但是如果给定数字比较大时,比如100000000,则求取速度非常慢。那...原创 2019-04-03 21:28:07 · 705 阅读 · 0 评论