
C++
ByaAym
这个作者很懒,什么都没留下…
展开
-
字符数组1
找出所有形如abc*de(三位数乘以两位数)的算式,使得在完整的竖式(乘法过程)中,所有数字属于一个特定的数字集合。 输入数字集合(相邻数字之间没有空格),输出所有竖式。 每个竖式前都有编号,最后输出解的总数。分析: 1.尝试所有的abc*de,判断是否满足条件。 2.应该充分里面string里面自带函数 strlen:返回字符串实际长度(’\0’结束) strchr(const cha原创 2017-02-19 19:32:58 · 254 阅读 · 0 评论 -
关于面向对象
关于构造函数与析构函数: 如果父亲有默认构造,则儿子不需要在子构造函数调用父亲构造,否则需要。 顺序:父构造函数—子构造函数—子析构函数—父析构函数重载:一个类中同名函数有不同参数 隐藏:子与父亲中的同名成员,父成员会被隐藏 (1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。 (2)如果派生类的函数与基类的函原创 2017-03-11 03:28:08 · 247 阅读 · 0 评论 -
剑指Offer
看了看《剑指Offer》这本书,发现里面说的很多东西确实很有道理,记一些比较经典的题目。包括之前的旋转数组、位运算都出自这本书。总结了以下规律: 1.写函数的时候要考虑:常规输入、边界输入、违法输入。 2.有些细节能注意就注意。比如尽量用指针传递复杂类型的参数,因为值传递,从形参到实参会产生一次复制操作。再如C#中不要多次用String的+运行来拼接字符串,因为这样会产生很多临时String,最原创 2017-03-24 06:30:16 · 1125 阅读 · 0 评论 -
位运算
在程序员圈子里有一个流传了很久的笑话,说世界上有10种人,一种人知道二进制,而另一种人不知道二进制。。二进制的位运算总共5种:与、或、异或、左移和右移。左移表示把某个数左移n位,左移n位的时候,最左边的n位将被丢弃,同时在最右边补上n个0。(一般情况下相当于x2,但是如果数字本身已经足够大而且是有符号整数时,继续左移会覆盖符号位,就会出现正数变成负数的情况)右移表示把某个数右移n位,最右边的n位被丢原创 2017-03-23 04:25:37 · 273 阅读 · 0 评论 -
旋转数组(二分查找)
把一个数组最开始的若干个元素搬到数组的末尾,称之为数组的旋转。 输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。 如数组{3,4,5,1,2}是{1,2,3,4,5}的一个旋转,该数组最小值为1。分析: 1.直接从头到尾遍历,O(N)。 2.旋转之后其实划分成2个排序的子数组,而且前面的子数组都大于或者等于后面子数组的元素。而且最小的元素就是分界线,可以用二分查找。 两个指针分别原创 2017-03-23 02:39:08 · 841 阅读 · 0 评论 -
土地问题(求出土地被分成多少面,有知识点)
有一块椭圆的土地,你可以在边界上选n个点,并两两连接得到n(n-1)/2条线段。他们最多能把土地分成多少个部分。分析: 1.最优方案不会让任何3条线段交于一点。 2.欧拉公式:V-E+F=2。其中,V是顶点数(即所有线段的端点+交点数),E是边数(即n段椭圆弧+这些线段被切成的段数),F是面数(即土地块数+椭圆外那个无穷大的面)。所以,只要求出V和E,F=E-V+1(减去无穷大的面)。 3.计原创 2017-02-22 07:26:07 · 478 阅读 · 0 评论 -
果园里的树(判断点是否在三角形内)
果园里的树排列成矩阵。它们的x和y的坐标都是1~99的整数。输入若干个三角形,依次统计每个三角形内部和边界上共有多少棵树。分析: 1.对于每个点,判断是否在三角形内。假设三角形ABC,判断点O,则O在三角形ABC的内部或者边界上当且仅当Sabc=Soab+Sobc+Soca。 2.判断两个浮点数a和b是否相等时,尽量判断fabs(a-b)是否小于一个事先给定的eps,如1e-9。 3.可以用海原创 2017-02-22 07:14:23 · 357 阅读 · 0 评论 -
Prime
#include<iostream>#include<fstream>#include<assert.h>//#define LOCALusing namespace std;//ifstream fin("input.txt");//ofstream fout("output.txt");bool is_prime(int x){ int i, m; assert(x原创 2017-02-19 17:39:43 · 540 阅读 · 0 评论 -
大整数运算(支持正负数、加减乘除)
#include<iostream>#include<cstdio>#include<string>#include<algorithm>using namespace std;const int maxn = 3000; //大整数位数struct BigNumber{ int len, s[maxn]; // 从0开始存个位 bool posi原创 2017-02-22 05:22:09 · 1025 阅读 · 0 评论 -
字符数组3
题目1:将字符串中的双引号换成单引号#include<stdio.h>int main(){ int c, q = 1; while ((c = getchar()) != EOF) { if (c == '"') { printf("%s", q ? "'" : "'"); q = !q;原创 2017-02-21 21:12:44 · 233 阅读 · 0 评论 -
字符数组2
输入一个字符串,求出其中最长的回文字串。 忽略所有标点符号和空格,忽略大小写,输出保持原样。 输入字符串长度不超过5000,占据单独一行。 输出最长的回文串,如果有多个,输出起始位置最靠左的。分析: 1.首先不能用scanf,因为它碰到空格或者TAB就会停止。 用fgets(buf,MAXN,stdin),它会读取不超过MAXN-1个字符,然后在末尾添上’\0’,读到’\n’就停止。如果一原创 2017-02-19 20:32:28 · 447 阅读 · 0 评论 -
C++随记
1.c/c++的内存分配方式 代码区:在一个exe中,正文段(Text Segment)储存指令 全局数据区:数据段(Data Segment)储存已初始化的全局变量和静态变量,BSS段(BSS Segment)储存未赋值的全局变量所需的空间。把比较大的数组定义在main函数外。 在程序运行时: 堆区:动态内存。程序运行时用malloc或new申请任意多少的内存,需要用户free或delet原创 2017-02-19 18:31:06 · 524 阅读 · 0 评论