前言
本系列课程是针对无基础的,争取用简单明了的语言来讲解,学习前需要具备基本的电脑操作能力,准备一个已安装python环境的电脑。如果觉得好可以分享转发,有问题的地方也欢迎指出,在此先行谢过。
前几天收到一个问题,说有下面这样一道题,问我该怎样计算,我直接说4x3x2=24。这个问题用数学方法就是非常简单,就是排列组合的问题;但是要把它转化为计算机去求解,不知道如何下手。
其实很多人用数学会解决问题,用计算机不会解决,除了多计算机的一些基本规则不了解外,更多其实还是自己无法将自己的想法描述出来,我一直觉得,如果你能用文字或者语言描述清楚问题,那么你就可以用编程语言去解决。
但是绝大多数时刻,我们其实就是记住了一个公式,如果这里不能套用公式,可能就不知道如何求解了,这个时候其实回归定义或者从最笨的方法下手,便于我们从新跳出框架理解问题。
这道题我的思路就是用语言描述就是从ABCD中随机选取一个字母,有4种可能,剩下的字母继续有3种可能选择,最后有2种选择可能。组合一起就是24种。
转换成编程,就是编程要如何去实现从4个字母中如何选择一个字母呢?然后再从剩下的当中继续选取。可能你又会发现新的问题,如何保证这次选择的和上次不一样?如何又可以保证所有的情况都已经找出来了?继续想可能你会觉得变的很复杂了。
不知道如何下手我们就用最笨的方法,一个个去组合列举,满足的就打印,不满足的就不打印,为了防止漏掉某种情况,我们就按照顺序来;
第一个是A,第二个可以BCD;第二个是B,那第三个可以CD;结果--ABC--ABD第二个是C,那么第三个可以BD;结果--ACB--ACD第二个是D,那么第三个可以BC;结果--ADB--ADC
上面一轮的所有情况就列举出来了,一共6种;同理往下推理就是第一个是B,第二个可以是ACD,根据上面的数据结果,其实我们已经可以知道结果就是4x6=24种了。只要按照这个方法下去,每一种情况都可以列举出来。
一个个元素去列举出来,这个我们很清楚,用循环就可以了。三个字母我们就用三次循环嵌套,这里会出现重复的情况,上面人工列举的时候我们是自动过滤掉重复字母情况的,在编程中,你只要把我们刚才过滤的规则用编程语言描述出来就可以了,就是第一个,第二个,第三个不相等。
求解代码:
鸡兔同笼问题
上面用到的其实就是列举法或者叫做穷举法,类似的问题有很多,比如下面比较有名的鸡兔同笼的问题:
用数学的方法解:
假设 鸡有 x只,兔子有y只,根据关系可以列出下面的等式。
x y = 352x 4y = 94
用编程的方法求解:
这里使用穷举法,其实就是一个个去套,假设 鸡有1只,兔子有34只,结果不满足;假设 鸡有2只,兔子有33只,结果不满足,以此类推,直到情况满足,得到一个结果,这就是所谓的穷举法,这里的情况虽然不多,但是如果人自己一个个去套还是有些麻烦的,如果给计算机去套,还是非常简单的,只要告诉它规则就可以了,满足规则输出结果。
(全文完)