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

  • Post author:
  • Post category:python


一、实现思路

第一层循环:确定百位数字,为防止重复,将所使用的数字从列表中取出。十位和个位从剩余列表中取值。

第二层循环:确定十位数字,为防止重复,将所使用的数字从列表中取出。个位从剩余列表中取值。

第三层循环:循环剩余列表,确定个位数字。

二、实现代码

# 第一种实现方法
tar = [1, 2, 3, 4]
count = 0  # 结果计数
for i in range(len(tar)):  #最外层循环,确定百位数字
    t1 = tar.copy()  # 操作临时变量,防止改变原始tar的值,影响下次循环
    x = str(t1.pop(i))  # 取出百位数字
    for j in range(len(t1)):  # 循环剩余列表,确定十位和个位
        t2 = t1.copy()  # 操作临时变量,防止改变t1的值,影响下次循环
        y = str(t2.pop(j))  # 取出十位数字
        for k in range(len(t2)):  # 循环剩余列表,确定个位
            print(x + y + str(t2[k]), end='  ')  #将百位十位和个位拼接,得到一个结果
            count += 1  #结果计数+1
    print('')  # 百位相同的结果显示为一行,百位数字改变的时候换行
print('最终结果为:%s个' % count)


# 第二种实现方法
tar = [1, 2, 3, 4]
count = 0  # 结果计数
for i in range(len(tar)):
    x = str(tar.pop(i))  # 取出百位数字
    for j in range(len(tar)):
        y = str(tar.pop(j))  # 取出十位数字
        for k in range(len(tar)):
            print(x + y + str(tar[k]), end='  ')  #将百位十位和个位拼接,得到一个结果
            count += 1  #结果计数+1
        tar.insert(j, int(y))  # 将拿出的十位数字放回原始列表,防止影响下次循环
    tar.insert(i, int(x))  # 将拿出的百位数字放回原始列表,防止影响下次循环
    print('')  # 百位相同的结果显示为一行,百位数字改变的时候换行
print('最终结果为:%s个' % count)

三、运行结果

四、实现方式分析

0.上面的实现方法,每次循环均能得到一个有效结果,循环次数为4*3*2 = 24次

1.3层循环遍历数组,条件判断去重,得到最终结果

循环次数:4*4*4 = 64次

count = 0
for x in range(1, 5):
    for y in range(1, 5):
        for z in range(1, 5):
            if (x != y) and (x !=z ) and (y != z):
                print("%d%d%d" % (x, y, z), end='  ')
                count += 1
    print('')
print('最终结果为:%s个' % count)

2.3层循环遍历数组,利用Set集合去重,得到最终结果

循环次数:4*4*4 = 64次

tar = ['1', '2', '3', '4']
count = 0
for i in tar:
    for j in tar:
        for k in tar:
            if len(set(i + j + k)) == 3:
                print("%s%s%s" % (i, j, k), end='  ')
                count += 1
    print('')
print('最终结果为:%s个' % count)



版权声明:本文为u013250071原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。