文章预览:
- 题目
- 解法一
- 输出结果
- 解法二
- 输出结果
- 输出结果
题目
有四个数字:1,2,3,4能组成多少个互不相同且无重复的数字的三位数? 各式多少?
解法一
我们粗略看一下这个题既然我们要组成三位数,那我们就循环3层每一层出一个数,并且if语句判断,互相不同即可(想对比较粗糙的算法,而且可塑性差,那要是问俩位数呢,四位数呢,不易改变)
for i in range(1,5):for j in range(1,5):for k in range(1,5):if i !=j and j!=k and k!=i:print("{}{}{}".format(i,j,k))
输出结果
123
124
132
134
142
143
213
214
231
234
241
243
312
314
321
324
341
342
412
413
421
423
431
432
解法二
我们深刻的想一想我们可不可以实现这样的一个函数,组合的元素我们自己随意提供,几位数排列也可以做出参数方便传递,那这样就很灵活了。
首先这个函数参数 肯定得用一个列表,另外得有一个b列表 这个列表相对应元素用了还是没用过,还有一个count记录是否已经达到要的个数了
代码如下:
count=0
b=[1]*100
def repeat_f(zuhe,digit,a):global count_zongglobal countglobal bif count == digit:count_zong+=1print(zuhe)return 0for i in range(len(a)):if b[i]==0:continueelse:b[i]=0count+=1repeat_f(zuhe*10+a[i],digit,a)count-=1b[i]=1return 0
zuhe=0
a=[1,2,3,4]
repeat_f(zuhe,3,a)
输出结果
123
124
132
134
142
143
213
214
231
234
241
243
312
314
321
324
341
342
412
413
421
423
431
432
换一种参数全排列
repeat_f(zuhe,4,a)
输出结果
1234
1243
1324
1342
1423
1432
2134
2143
2314
2341
2413
2431
3124
3142
3214
3241
3412
3421
4123
4132
4213
4231
4312
4321