题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
分析1:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。
result = []
for i in range(1,5):
for j in range(1,5):
for k in range(1,5):
if (i != j) and (i != k) and (j != k):
result.append(i*100 + j*10 + k)
print(result) # 打印数据结果
print(len(result)) #打印数据个数
分析2:根据排列组合,从1,2,3,4这四个数中,任意取出三个数组成一个三位数,并且每一位都不能重复,正好适用排列组合的方式取三次数字。
def get_value(n):
if n == 1:
return n
else:
return n*get_value(n-1)
def get_last_value(n,m):
first_item = get_value(n)
print("n:%s value:%s" %(n,first_item))
second_item = get_value(m)
print("m:%s value:%s" %(m,second_item))
third_iterm = get_value(n-m)
print("(n-m):%s value:%s" %((n-m),third_iterm))
return first_item/(second_item*third_iterm)
if __name__ == "__main__":
Final_result = get_last_value(4,1)*get_last_value(3,1)*get_last_value(2,1)
# 根据排列组合取三次的组合
print(Final_result)
#这种方式只是获得了有多少种组合,但是没有给出具体的数值
补充:利用python计算C(n,m)
( n m ) \begin{pmatrix} n\\ m\end{pmatrix} (nm) = n ! m ! ∗ ( n − m ) ! \frac{n!}{m!*(n-m)!} m!∗(n−m)!n!
import math
n,m = map(int,input().split())
print(math.factorial(n)//(math.factorial(m)*math.factorial(n-m)))