三分钟,暴力题让我AC了13次

本文详细介绍了暴力解题方法,包括简单的暴力枚举、数学知识优化以及DFS和BFS在全排列问题中的应用。通过实例展示了如何使用C++实现暴力解法,并提到next_permutation()函数在解决全排列问题上的高效性。
摘要由CSDN通过智能技术生成

这是一篇如何让你驾驭模拟暴力题的文章
话不多说我们正片开始

啥事暴力?

本质就是把所有可能的情况一个一个比对,看看符不符合要求。比如在数组里找出1。我们就遍历数组一个一个比较,从第一个到最后一个,如果找到了直接break。就这么简单。缺点是要一个一个比,太慢了,如果数组是升序那就废掉(点名表扬二分)。

简单的暴力

就是写个for循环或者很多层for循环,把所有情况枚举出来判断

  • 暴力枚举

一般都叫穷举,我叫习惯了。 可以解决简单的小学问题如鸡兔同笼。不用你想算式还是方程,直接把所有数列出来,逐个比对。

比如:一个笼子里面有鸡若干只,兔若干只。共有头50个,共有腿160条。鸡兔都有的情况下,求鸡兔各多少只?

相信你口算都能算出,但是用暴力的办法怎么写呢?首先看条件。首先看问题。问你鸡兔多少只。那就枚举只数。看共有50头,那么兔子和鸡总数不超过50,也就是说我们枚举的范围不大于50。看共有160条腿。那就再枚举到160腿的时候break掉
此外我们还必须知道兔腿=兔子数×4 鸡腿=鸡数×2

那就好办了,外层循环枚举兔子只数,内层枚举鸡数,i枚举到50,而j因为总数不能超过50,所以只能枚举到50-i,到i×4+j×2==160的时候返回答案并break

下面是c++代码

pair<int,int> chickenAndRabbit(int sum_head,int sum_feet)//为了方便,这里使用函数的形式写
{
   
    for (int i = 0; i <= sum_head; i++)
    {
   
        for (int j = 0; j <= sum_head - i; j++)
        {
   
            if (i * 4 + j * 2 == 160)
            {
   
                return make_pair(i, j);
            }
        }
    }
}

在这里插入图片描述
没有问题

  • 一般暴力

接下来会用一点数学知识。这种暴力很普通,就像我刚刚的例子,有较为简单的在数组里找出奇数个数的,以及相对难一点判断这个数是否是质数。

首先确定思路,是否适合暴力?怎么暴力?等等。最后就可以优化算法了。

就拿判断质数为例。

首先,我们很容易想到列举1-n之间(2~n-1)的所有数,然后n÷i,如果余0则不是素数,直接return(break),否则列举下一个直到枚举完。

下面是c++代码

为了方便还是写成函数,欸嘿

bool isPrime(int n)
{
   
    for (int i = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值