210806算法日记:s.count()&递归的参数&字符串c++特性及字符串函数

  • 1、s.count函数
  • 判断集合中是否有该元素,有的话返回true
  • 也没什么特别意思,就是今天用了好几次,是set里面的特征函数,一般用来找是否集合中存在集合中两个值相加的值等等
if(s.count(i)&&s.count(x-i))
cout<<i<<' '<<x-i<<endl;
  • 2、递归的参数
  • 说到递归,我可是每次都被他给搞的头皮发麻,记得接触的最早的递归是阶乘
if(n==1)return 1;
else return n*f(n-1);
  • 这就是递归了,这个递归的参数很好找,大部分都是看层数,这样就是从高层递归到底层
  • 递归处理的是一个大问题可以分成很多完全一样的小问题的问题,且有终止条件
  • 他将正方形矩阵均分为 4 个更小的正方形矩阵,每个更小的矩阵的边长是原矩阵的一半。其中左上角那一个矩阵的所有作弊者都将得到赦免,剩下 3 个小矩阵中,每一个矩阵继续分为 4 个更小的矩阵,然后通过同样的方式赦免作弊者……直到矩阵无法再分下去为止。
  • 上面就是典型的递归问题,递归参数自然就是矩阵大小,每次缩小一半
  • 仔细观察变化的规律是那些东西再确定递归的参数选取
void dfs(int x,int r,int c)
{
	if(x==2)
	{
		a[r][c]=0;
		return;
	}
	for(int i=r;i<=r+x/2-1;i++)
		for(int j=c;j<=c+x/2-1;j++)
			a[i][j]=0;
	dfs(x/2,r+x/2,c);
	dfs(x/2,r+x/2,c+x/2); 
	dfs(x/2,r,c+x/2);
}
  • 3、c++特征的string以及find函数
  • string不用多说,就是把他当成数字一样处理就行了,但做过子串匹配问题的都知道循环很麻烦,所以一般使用
s="asdf ghui jkuo"
s.find("ghui")输出5
  • 该函数会返回从零计数的首个子串的位置,当然不能解决单词匹配问题因为
因为单词中间有空格
s="I have a dog"
s.find("do")输出9,并不会找不到,这是他的一个致命优点也是致命缺点
  • 找不到会输出s.npos死记硬背就好
  • 判断一个子串是否存在
s="asdf ghui jkuo"
if(s.find("ghui")!=s.npos)
cout<<s.find("ghui")
  • string的特质是自动滤去前空格,用cin输入在后空格或者回车处终止getline吃空格不吃回车,cin连空格都不吃
  • 所以处理单词问题时可以逐串输入,判断每个串的情况累计就是总串的情况
  • 210806完结
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值