- 整型数组元素数量不能超过1 * 107,超过了编译不会检查出错误,但是运行会崩溃。。。
- 取余运算符只能用在两个int型之间。
- #include <cmath> float fmod (float x, float y) 功能计算x / y的余数。可以在%用不了的情况下尝试下
- 两个数的位数分别为a, b, 则两个数相乘后的数位为a + b - 1。
- 一个包含所有c++的头文件:#include <bits/stdc++.h>。但不推荐使用,因为会浪费时间
- map<a, b> mp中是依靠关键字有小到大排序的,即依靠a。
-
有时候你可能会看到有些程序不使用方便的"using namespace std;"命令语句。为什么不直接使用"using namespace std;"比较简便?因为这样对于比较大的程序来
说不是很好的习惯,因为使用这句话虽然简便了,但是这样导致把std命名空间的所有标准库函数都引进到程序文件里,这样如
果以后程序涉及到同名函数名或变量名,将会出现难以调试的错误。 - 非全局数组,即定义在函数内部的数组(如main函数)需要手动进行初始化。而全局数组系统会自动初始化,一般会默认初始化为0。如int数组将每个变量初始化为0, 全局布尔数组将每个元素默认初始化为0。(参考处:https://blog.csdn.net/zzlu_88888/article/details/83303656)
- 判断是否为素数的函数
1 bool isPrime(int x) { 2 if (x <= 1) return false; 3 if (x == 2) return true; 4 if (x % 2 == 0) return false; 5 for (int i = 3; i * i < x; i += 2) { 6 if (x % i == 0) return false; 7 } 8 return true; 9 }
- 设s是一个字母,那么语句"s ^= 32;" 便可以把当前字母从小写变成大写又或者把大写变成小写。计算机异或运算如:0 ^ 0 = 0; 0 ^ 1 = 1; 1 ^ 0 = 1; 1 ^ 1 = 0;eg:'A' 是65,二进制码:01000001,‘a’是97,二进制码:01100001。所以‘a’ - ‘A’ == 32,32 == 25,异或运算符会把s的从右到左的第5位二进制数与32的第5位二进制数即1 进行异或运算, 若s == ‘A’ 则第5位二进制数为 0, 异或运算后结果变为1,相当于加了32。若s == ‘a’则第5位二进制数为1,异或运算后结果变为0, 相当于减了32。
- 深搜模板
1 int search(int t) 2 { 3 if(满足输出条件) 4 { 5 输出解; 6 } 7 else 8 { 9 for(int i=1;i<=尝试方法数;i++) 10 if(满足进一步搜索条件) 11 { 12 为进一步搜索所需要的状态打上标记; 13 search(t+1); 14 恢复到打标记前的状态;//也就是说的{回溯一步}状态恢复,回溯算法的话,一定要注意恢复现场,要保证每一次递归下去的时候我们的状态都是正确的 15 } 16 } 17 }
- 个数是指数级别的,凡是指数级别的问题呢,要枚举出所有方案的话,就得要用递归+回溯的方式来做
- 想要debug递归函数的话,需要在递归函数语句里面设置断点
- 以上为《算法竞赛宝典 语言及算法入门》P89内容。
-
random函数不是ANSI C标准,不能在gcc,vc等编译器下编译通过。但在C语言中int random(num)可以这样使用,它返回的是0至num-1的一个随机数。
可改用C++下的rand函数来实现。
rand()%n 范围 0~n-1
rand()主要是实现 产生随机数,其他我们在这里可以无视他
显然任意 一个数 rand()%n 范围显然是 0~n-1;
那么 如何产生 n~m的数呢? 一样的 我们只要对rand()进行一些 符号操作就行了;
n+rand()%(m-n+1); 这样就可以了
- 排列与组合的异同
一、是否按次序排列 1、排列:从n个不同的元素中,取r个不重复的元素,按次序排列,称为从n个中取r个的无重复排列。 2、组合:从n个不同的元素中,取r个不重复的元素,组成一个子集,而不考虑其元素的顺序,称为从n个中取r个的无重组和。 二、符号表示不同 1、排列A(n,r) 2、组合C(n,r)
- 异或运算符
位运算符家族中,最常用的,莫过于异或运算符。 异或运算符是指: 参与运算的两个值,如果两个相应位相同,则结果为0,否则为1。即:0^0=0, 1^0=1, 0^1=1, 1^1=0 例如:10100001^00010001=10110000 0^0=0,0^1=1 可理解为: 0异或任何数,其结果=任何数 1^0=1,1^1=0 可理解为:1异或任何数,其结果=任何数取反 任何数异或自己,等于把自己置0 1)按位异或可以用来使某些特定的位翻转,如对数10100001的第1位和第2位翻转,可以将数与00000110进行按位异或运算。 10100001^00000110=10100111 用十六进制表示: 0xA1 ^ 0x06 = 0xA7 (2)通过按位异或运算,可以实现两个值的交换,而不必使用临时变量。例如交换两个整数a,b的值,可通过下列语句实现: a=10100001, b=00000110 a=a^b; // a=10100111 b=b^a; // b=10100001 a=a^b; // a=00000110 (3)异或运算符的特点是:数a两次异或同一个数b(a=a^b^b)仍然为原值a。(实现两个值的交换正是用到了这点) ———————————————— 原文链接:https://blog.csdn.net/duji_160/article/details/76533334
- 将g数组完全赋值到backup数组,即给a数组做一个备份:memcpy(backup, g, sizeof g);
- 输出换行格式的简写:puts("");
- 一维动态规划时间复杂度一般有O(n)和O(n^2)两种,时间复杂度取决于状态转移方程。
- sort排序pair类时,会先以第一个关键字排序,第一个关键字相同时,再以第二个关键字排序。