《从10开始学C++》六


前言

前几节课大部分都是入门,从这章开始,大部分都是普及-
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类型是无类型,可以无返回值
好了,深搜就是这样

散会

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值