python输出 百十个 三位不重复的三位数

直接打码,输出 百十个 三位不重复的三位数

import itertools

'''
有随机4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
这题还算比较简单,思路是:
1.先确定百位数、然后是十位数、个位数。1-4 四个数字循环一遍,就都全出来了。
2.如果不放心结果是否有重复,最后一行可以改成 print(set(res)),把 res 的类型由列表改为集合(set),因为集合不允许有重复值,所以就可以保证结果的不重复性了。
'''

# 三个for循环效率比较低,采用python自带的方法进行排列组合
def my_func_1(list2):
    my_set = {}
    my_list = []
    for i in itertools.permutations(list2,3):
        if i[0]!=i[1] and i[1]!=i[2] and i[0]!=i[2]:
            my_list.append(i)
    if my_list:
        # 去重
        my_set = set(my_list)
        # 输出具体的数字
        for item in my_set:
            my_num = 100*item[0]+10*item[1]+item[2]
            print(my_num,end=' ')
    print()
    print(len(my_set))
    return ""


# 采用三层for循环,最后统一判断,只能操作1,2,3,4这四个数字
def my_func_2():
    my_num = []
    my_count = 0
    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 i !=k:
                    num_1 = 100*i+10*j+k
                    my_num.append(num_1)
                    my_count+=1
    if my_num:
        return my_num,my_count


# 或者使用三层for循环实现,每步骤都进行判断,只能操作1,2,3,4这四个数字
def my_func_3():
    res = []
    my_count = 0
    # 先确定百位
    for i in range(1,5):
        # 再确定十位
        for j in range(1,5):
            if j != i:
                # 最后确定个位数
                for k in range(1,5):
                    if k != j and k!=i:
                        res.append(i*100+j*10+k)
                        my_count+=1
    print(res,my_count)



if __name__=="__main__":
    list1 = [1, 2, 2, 4]
    print(my_func_1(list1))
    # print(my_func_2())
    # my_func_3()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值