Python练习题1

来源:互联网 发布:java实现支付宝转账 编辑:程序博客网 时间:2024/06/02 03:45

原题:有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?

扩展:求N个数字集合组成的所有M位数

思路:先确定各个数字的位置,然后进行组合

# _*_  coding:utf-8 -*-'''Created on 2017年7月21日@author: I'python'''global long_list#数字与其对应的位置列表global NUM#数字总个数global BIT#结果位数global result_set#最终结果集合def cacl_place(num_list):      aux_list = num_list    for idx, item in enumerate(aux_list):           tmp_list = aux_list[0:idx]               tmp_list.extend(aux_list[idx+1:])        new_dic = [item,len(tmp_list)]#计算数字与其对应的位置        if len(tmp_list) == (NUM-1) or len(tmp_list) < BIT:#过滤不符合位置条件的结果            long_list.append(new_dic)        if len(tmp_list) > 1:            cacl_place(tmp_list)def get_result():    rst = 1    for item in long_list:        if(item[1] == (NUM - 1)):#处理最高位            rst = (rst // (10 ** (BIT-1))) * (10 ** (BIT-1))#清零该位及后面的位            rst = item[0] * (10 ** (BIT-1))        else:#处理低位             rst = (rst // (10 ** item[1])) * (10 ** (item[1]))#清零该位及后面的位            rst += (item[0] * (10 ** (item[1]-1)))        if item[1] == 1:            result_set.add(rst)if __name__ == '__main__':    NUM = 5    BIT = 3    result_set = set()    long_list = []    num_list = [1, 2, 3, 4, 5]    cacl_place(num_list)    get_result()    print '共' + str(len(result_set)) + '个结果:'    print sorted(result_set)