一 递归

scanf和cin使用区别




蓝桥杯 小学 Python 蓝桥杯 小学c++初级_数据结构


 递归搜索数(斐波那契)


蓝桥杯 小学 Python 蓝桥杯 小学c++初级_蓝桥杯 小学 Python_02


2的阶乘


蓝桥杯 小学 Python 蓝桥杯 小学c++初级_算法_03


1.递归实现指数型枚举


蓝桥杯 小学 Python 蓝桥杯 小学c++初级_数据结构_04


蓝桥杯 小学 Python 蓝桥杯 小学c++初级_蓝桥杯 小学 Python_05


若要记录下所有的方案,可以如下


蓝桥杯 小学 Python 蓝桥杯 小学c++初级_Powered by 金山文档_06


本题的思路是设置一个二维数组记录一共有2^n次的方案,和每个方案有n个位置

判断边界条件,即是u>n时全部递归完成时,for循环遍历当下方案,如果标记状态符合,即存入第cnt方案上i。再return结束本次递归

分为两种选与不选两种情况,选了的状态标记为1,未选的状态为2,进入下一次递归,直至u>n。递归回溯完之后需要恢复现场,也可以不恢复,因为递归下一位已经覆盖值了

这里puts相当于输出字符串+一个换行


蓝桥杯 小学 Python 蓝桥杯 小学c++初级_数据结构_07


蓝桥杯 小学 Python 蓝桥杯 小学c++初级_数据结构_08


用vector可以 计算每个方案的长度再来遍历循环

2.递归实现排列型枚举  (字典序排列)


蓝桥杯 小学 Python 蓝桥杯 小学c++初级_蓝桥杯 小学 Python_09


注意这里的state的恢复现场也可以省略,因为在回溯到下一个递归里也覆盖了,不过标记位置的使用需要恢复(state表示的是标记i是否用过


蓝桥杯 小学 Python 蓝桥杯 小学c++初级_c++_10


蓝桥杯 小学 Python 蓝桥杯 小学c++初级_数据结构_11


3.递归实现组合类型


蓝桥杯 小学 Python 蓝桥杯 小学c++初级_蓝桥杯 小学 Python_12


蓝桥杯 小学 Python 蓝桥杯 小学c++初级_算法_13


剪枝则加上   if(u+n-start<m)   return;

假设要排第u位,则已经排了u-1位,后面还有n-start+1个数,则u-1+n-start+1<m就直接除去

4.带分数


蓝桥杯 小学 Python 蓝桥杯 小学c++初级_蓝桥杯 小学 Python_14


1 byte     =     8 bit      int = 4 byte     char =1 byte     longlong = 9 byte

  字节(B)          位(b)               32位                  8位                   64位

1M = 2^20 = 10^6

要使某个数后面加上一位可以让原数*10,再加上这一位


蓝桥杯 小学 Python 蓝桥杯 小学c++初级_蓝桥杯 小学 Python_15


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指向的地址为起点的内存中。