题目:有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
**程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。
个人解题思路
利用排列组合知识算出总共有4X3X2= 24个数,构造每个数加入列表中,打印输出。
import random li = ["1","2","3","4"] all_sum_num = 4*4*4 new_sum_list = [] for i in range(all_sum_num): choose_li = random.sample(li,3) new_num_str = "".join(choose_li) new_sum_list.append(new_num_str) num_set = set(new_sum_list) num_str_list = list(num_set) print(num_str_list) print(len(num_str_list))
分析:这种写法有个漏洞,就是随机取出的3个数并不能完全取完所有可能的数,造成结果不唯一,每次运行程序可能结果都不一致。
参考解答方法:
li = [] for i in range(1,5): for j in range(1,5): for k in range(1,5): if i != k and i != j and j != k: num = i*100 + j*10 + k li.append(num) ? print(li) print(len(li))
分析:用3个for循环,加上if条件判断,将产生的数加入列表即可
上述代码可以继续精简
li1 = [1,2,3,4] li2 = [a*100 + b*10 +c for a in li1 for b in li1 for c in li1 if a != b and a != c and b != c] print(li2) print(len(li2))
分析:采用列表生成式,分别对百位、十位、个位的数字进行生成并合成列表的元素。
(本文编号001,首发于2018年9月11日)
原文地址:https://www.cnblogs.com/Nicholas0707/p/9630924.html
时间: 2024-11-05 11:38:45