一 递归
scanf和cin使用区别
递归搜索数(斐波那契)
2的阶乘
1.递归实现指数型枚举
若要记录下所有的方案,可以如下
本题的思路是设置一个二维数组记录一共有2^n次的方案,和每个方案有n个位置
判断边界条件,即是u>n时全部递归完成时,for循环遍历当下方案,如果标记状态符合,即存入第cnt方案上i。再return结束本次递归
分为两种选与不选两种情况,选了的状态标记为1,未选的状态为2,进入下一次递归,直至u>n。递归回溯完之后需要恢复现场,也可以不恢复,因为递归下一位已经覆盖值了
这里puts相当于输出字符串+一个换行
用vector可以 计算每个方案的长度再来遍历循环
2.递归实现排列型枚举 (字典序排列)
注意这里的state的恢复现场也可以省略,因为在回溯到下一个递归里也覆盖了,不过标记位置的使用需要恢复(state表示的是标记i是否用过
3.递归实现组合类型
剪枝则加上 if(u+n-start<m) return;
假设要排第u位,则已经排了u-1位,后面还有n-start+1个数,则u-1+n-start+1<m就直接除去
4.带分数
1 byte = 8 bit int = 4 byte char =1 byte longlong = 9 byte
字节(B) 位(b) 32位 8位 64位
1M = 2^20 = 10^6
要使某个数后面加上一位可以让原数*10,再加上这一位
5.费解的开关
每一行的操作都被前一行灯的状态所决定
细节:1.枚举第一行的操作 1表示按,0表示不按
2.在遍历整个矩阵时:1是灯亮,0是灯灭
3.memcpy 可以用来复制数组,这里是先把原数组备份一下,然后对本数组操作,本次操作结束后,要再把备份数组还原回来,再进行下一次操作啦~
memcpy函数:是C/C++语言中的一个用于内存复制的函数,声明在 string.h 中(C++是 cstring)。 函数有三个参数,第一个是目标地址,第二个是源地址,第三个是数据长度。
void*memcpy(void*destin,void*source,unsigned n);
作用是:以source指向的地址为起点,将连续的n个字节数据,复制到以destin指向的地址为起点的内存中。