前言
前几节课大部分都是入门,从这章开始,大部分都是普及-
C++14(GCC 9)
正文
dowhile循环
这个几乎不用,也就没说,现在顺带一提
用法:
int i=0;
do{
i++;
}while(i<5)
cout<<i;
运行结果:
5
--------------------------------
Process exited after 0.4661 seconds with return value 0
请按任意键继续. . .
dowhile的运行流程是:先执行一遍do里头的东西,再判断符不符合条件,符合就再执行一遍
基本没啥用,因为几乎没有出现过这种情况
枚举
俗话说,知识简单习题难,枚举其实特别简单,可是你翻翻洛谷题单,哪一个枚举都是普及-,不再是从前的入门了,也就是说,开始变难了。
枚举也被称为穷举,就是通过暴力的一种方法,如果可以不用就别用,容易超时,也就是洛谷里的TLE(time limit error)
将问题的所有可能的答案一一列举,然后根据条件判断此答案是否合适,合适就保留,不合适就丢弃。例如:找出1到100之间的素数,需要将1到100之间的所有整数进行判断。
举个例子吧!
void dfs(int m,int u,int tx){
if(m==k){
if(jpn(u))s++;
return;
}
for(int i=tx;i<n;i++){
dfs(m+1,u+x[i],i+1);
}
}
这是一个深度优先搜索的一个例子(P1036选数)
深搜的就是一种枚举,复杂度较高。
像这种以及循环,都可以枚举。
挺简单的吧?习题能让你感觉到难
递归
基本和循环类似,与循环不同的是,循环占得是时间,递归占得是内存(空间)
递归就是函数自己调用自己,直到已知数据,再算回去
这么想的话,循环就是递归算回去的过程
举例:
#include<bits/stdc++.h>
using namespace std;
int n;
int rubbit(int x){
if(x==1||x==2){
return 1;
}
return rubbit(x-1)+rubbit(x-2);
}
int main(){
cin>>n;
cout<<rubbit(n);
return 0;
}
//给定一个数n,求兔子数列(斐波那契数列)中第n个值是什么
这是一个简单的递归求值
DFS深搜
深度优先搜索可以遍历二叉树,可以寻找路线(自动走迷宫),也可以求值(P1036选数)
他和递归的不同点是:
- 递归是得到已知数据后原路返回算回去
- 而DFS是达到上/下限时返回,返回一层再接着枚举其他的可能,要是一个可能没有再返回
所以说,DFS就是一种利用函数的枚举
那么问题来了,返回值返回啥?
void类型是无类型,可以无返回值
好了,深搜就是这样