Python练习100题一

题目:有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!(nm)!n!

import math
n,m = map(int,input().split())
print(math.factorial(n)//(math.factorial(m)*math.factorial(n-m)))

你可能感兴趣的:(Python)