点击蓝字
关注我们
![10e522121b50f73b53db20fbc1103577.png](https://img-blog.csdnimg.cn/img_convert/10e522121b50f73b53db20fbc1103577.png)
会酸的柚子
Python爱好者
搞机少年
![3fb23b7fabb1fab3cd803763387f832a.gif](https://img-blog.csdnimg.cn/img_convert/3fb23b7fabb1fab3cd803763387f832a.gif)
python小程序教写系列第二期
让我们一起看看今天要解决的问题~
![f6d7387149d68050f03a7fd8a093e98f.png](https://img-blog.csdnimg.cn/img_convert/f6d7387149d68050f03a7fd8a093e98f.png)
这道题目我们如果学过排列组合
便能够快速地算出结果
我们来复习一下排列的定义及公式
排列定义:从n个不同的元素中,取r个不重复的元素,按次序排列,称为从n个中取r个的无重排列。排列的全体组成的集合用P(n,r)表示。
排列计算公式
![834ceb23cdf72510889ed2617471a9d9.png](https://img-blog.csdnimg.cn/img_convert/834ceb23cdf72510889ed2617471a9d9.png)
我们把题目给的数据代入公式,
可以快速的计算出结果,
有24种情况
情况如下:
123,124,132,142,134,143,213,214,231,241,234,
243,312,314,321,341,324,342,412,413,421,
431,423,432
我们分析一下排列的规律。得出程序的一个思路。
题目要的结果是个三位数,
可以填在百位、十位、个位的数字都是1、2、3、4。
我们可以把这个三位数拆成三部分,
让1、2、3、4这四个数都循环一遍,
再去掉重复的排列情况。
这便是我们的编程思路
由此写出代码
![25882681cef9fbfb63de69b843b9dd28.png](https://img-blog.csdnimg.cn/img_convert/25882681cef9fbfb63de69b843b9dd28.png)
(缩进一次均为四格,以此类推)
下面我们来解释这几行代码的作用。
第一行
i作为三位数中的一位,让它从1开始取数,取到4
第二行
在第一行的基础上缩进四格空格,在第一行取数的同时,第二行j作为三位数中的一位,同样也是从1开始取数,取到4
第三行
在第二行的基础上再缩进四格空格,表示在上行的同时,继续取数,也是从1取到4
第四行
if就是如果
!= 则是不等号
代码的意思是如果i 不等于k,同时i 不等于j,同时j 不等于k
第五行
打印出i j k
便组成了我们需要的答案
这样的写法非常好理解,
虽然对于电脑来说计算量大了一点,
但也就是几十毫秒,
对于初学者来说还是非常适合入门的。
前三行都是在取数,我们可以看看前三行都取出哪些数。
1 1 1,1 1 2,1 1 3,1 1 4,1 2 1,1 2 2,1 2 3,
1 2 4,1 3 1,1 3 2,1 3 3,1 3 4,1 4 1,1 4 2
1 4 3,1 4 4,2 1 1,2 1 2,2 1 3,2 1 4,2 2 1
2 2 2,2 2 3,2 2 4,2 3 1,2 3 2,2 3 3,2 3 4
2 4 1,2 4 2,2 4 3,2 4 4,3 1 1,3 1 2,3 1 3
3 1 4,3 2 1,3 2 2,3 2 3,3 2 4,3 3 1,3 3 2,
3 3 3,3 3 4,3 4 1,3 4 2,3 4 3,3 4 4,4 1 1
4 1 2,4 1 3,4 1 4,4 2 1,4 2 2,4 2 3,4 2 4
4 3 1,4 3 2,4 3 3,4 3 4,4 4 1,4 4 2,4 4 3
4 4 4
我们发现其中许多数字个十百位都重复出现了,
所以我们在前三行的基础上增加第四行用来筛选
好了,今天的python小程序就到此结束,
大家可以自己动手试试,
或者你有更好的思路也可以分享给我们
![313665cb986bafefb97ed023f6e08b42.png](https://img-blog.csdnimg.cn/img_convert/313665cb986bafefb97ed023f6e08b42.png)
微信公众号 : 柚子的code
编辑:会酸的柚子
审核:柯基猿