随笔分类 - C and C++
摘要:题目:在字符串中找出第一个只出现一次的字符。如输入“abaccdeff”,则输出‘b’。方法1:看到这个题目,最直观的想法就是就是遍历法,也就是从头开始取字符串中的一个字符,将其与其后的所有字符比较,如果有相同的字符,那么就证明它不是只出现一次的字符。当第一次出现遍历完其后字符并且没有重复时,表明这个字符就是“第一个只出现一次的字符”。如果字符串有n个字符,每个字符可能与后面的O(n)个字符相比较,因此这种思路的时间复杂度是O(n2)。方法2:题目中要求第一个只出现一次的字符,那么就跟字符出现的次数有关。我们考虑如何统计字符出现的次数,然后找出第一个次数为1的那个字符。这里我们需要一个数据容器
阅读全文
摘要:题目:我们把只包含因子2,3和5的数称作为丑数。求按从小到大的顺序的第1500个丑数。例如6,8都是丑数,但是14不是,因为它包含因子7。习惯上我们把1作为第一个丑数。方法一:遍历法使用遍历法求第k个丑数,从1开始遍历,如果是丑数则count++,直到count==k为止。那么如何判断丑数呢?根据丑数的定义,丑数只有2,3,5这三个因子,那么我们就拿数字除以这三个因子。具体算法如下:如果一个数能够被2整除,那么让他继续除以2;如果一个数能够被3整除,那么让他继续除以3;如果一个数能够被5整除,那么让他继续除以5;如果最后这个数变为1,那么这个数就是丑数,否则不是。代码实现如下:View Cod
阅读全文
摘要:有过C++开发经验的人会发现,我们可以将0作为false,非零作为true。一个函数即使是bool类型的,但是我们还是可以返回int类型的,并且自动将0转换成false,非零转换成true。代码实例如下: 1 #include<iostream> 2 #include<stdlib.h> 3 using namespace std; 4 5 bool fun()//函数返回类型是bool,但是我们在函数中可以返回int类型。 6 { 7 return 1; 8 } 9 10 void main()11 {12 int a=1;13 if(a)//a是int类型的,但是.
阅读全文
摘要:题目:创建一个类,类中的数据成员时一棵二叉搜索树,对外提供的接口有添加结点和删除结点这两种方法。用户不关注二叉树的情况。要求我们给出这个类的结构以及实现类中的方法。思路添加结点:添加结点其实很容易,我们只需要找到结点所行对应的位置就可以了,而且没有要求是平衡的二叉搜索树,因此每次添加结点都是在叶子结点上操作,不需要修改二叉搜索树整体的结构。要找出添加节点在二叉搜索树中的位置,可以用一个循环解决。判断插入结点与当前头结点的大小,如果大于头结点则继续搜索右子树,如果小于头结点则继续搜索左子树。直到搜索到叶子结点,此时进行插入结点操作。如果插入的结点等于二叉搜索树中当前某一结点的值,那么退出插入操作
阅读全文
摘要:int *p[3]与int(*p)[3]的区别*p[3]这个是一个指针数组,它所代表的意思是数组中的每一个元素都是一个指针变量,而(*p)[3],p是一个指针变量,表示指向一个含有3个整型元素的一维数组。View Code int i,j; int a[2][3]={3,4,5,6,7,8}; // int *p[3] ; //表示一个数组,数组中的元素是指针类型,一共有三个元素 int (*q)[3]; //是一个指针,指向一个含有三个int型的数组(q+1)会跳三个数组元素 //把第一行三个元素地址存放在p指针数组中 for( i=0;i<3;++i...
阅读全文
摘要:对于指针和常量,有以下三种形式都是正确的:const char * myPtr = &char_A;//指向常量的指针char * const myPtr = &char_A;//常量的指针const char * const myPtr = &char_A;//指向常量的常量指针下面依次对这三种类型进行介绍。因为*操作符是左操作符,左操作符的优先级是从右到左,对于1.常量指针(Constant Pointers)int * const p先看const再看* ,是p是一个常量类型的指针,不能修改这个指针的指向,但是这个指针所指向的地址上存储的值可以修改。实例1:Vie
阅读全文
摘要:1.参考文献参考1: C++继承中构造函数、析构函数调用顺序及虚函数的动态绑定参考2:构造函数、拷贝构造函数和析构函数的的调用时刻及调用顺序参考3:C++构造函数与析构函数的调用顺序2.构造函数、析构函数与拷贝构造函数介绍2.1构造函数构造函数不能有返回值缺省构造函数时,系统将自动调用该缺省构造函数初始化对象,缺省构造函数会将所有数据成员都初始化为零或空创建一个对象时,系统自动调用构造函数2.2析构函数析构函数没有参数,也没有返回值。不能重载,也就是说,一个类中只可能定义一个析构函数如果一个类中没有定义析构函数,系统也会自动生成一个默认的析构函数,为空函数,什么都不做调用条件:1.在函数体内.
阅读全文
摘要:图的邻接表表示法类似于树的孩子链表表示法。对于图G中的每个顶点vi,该方法把所有邻接于vi的顶点vj链成一个带头结点的单链表,这个单链表就称为顶点vi的邻接表(Adjacency List)。1. 邻接表的结点结构(1)表结点结构 ┌────┬───┐ │adjvex│next│ └────┴───┘ 邻接表中每个表结点均有两个域: ① 邻接点域adjvex 存放与vi相邻接的顶点vj的序号j。 ② 链域next 将邻接表的所有表结点链在一起。注意: 若要表示边上的信息(如权值),则在表结点中还应增加一个数据域。(2)头结点结构 ┌────┬─────┐ │vertex│firs...
阅读全文
摘要:1. 解题思路AKS算法整体包括六个步骤,它本身相当于一个过滤器,只有经过各种条件筛选以后的数才是素数。步骤如 REF _Ref288765521 /h 图 1 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003200380038003700360035003500320031000000所示。Step1就是判断n是否是一个数的幂次方形式,如果是的话就表明n是合数,程序结束。Step2需要找出比(log2n)2大的最小的欧拉函数r。Step3是找出gcd(a,n),如果存在a<=r的情况,
阅读全文
摘要:步骤一:首先必须要有NTL.lib,这是我们通过源代码手动生成的,具体方法参考前一篇博客:vs2008生成lib文件。步骤二:接着我们测试NTL是否能用,具体步骤如下:文件->新建->项目->空项目,项目名为NTL_Test,然后将WinNTL-5_5_2/include的整个目录,WinNTL-5_5_2/tests目录下的QuickTest.cpp和NTL.lib拷贝到NTL_Test项目文件夹下,再在VS中添加源文件QuickTest.cpp和NTL.lib,最后添加include目录,具体方法见博文:vs2008添加头文件路径(vs2008 add directori
阅读全文