有1 2 3 4 这四个数字,设计程序计算能组成多少个互不相同且无重复数字的3位数

有1 2 3 4 这四个数字,设计程序计算能组成多少个互不相同且无重复数字的3位数

这里我总结了四种方法来实现,还在继续研究中,后面会持续更新,基础打好,才能学好编程,持续努力的小白
# 方法一,利用if判断限定条件
def two_question01():
    num = 0
    for i in range(1,5):
        for j in range(1,5):
            for id in range(1,5):
                if i!=j and i!=id and j!=id:
                    li = [i, j, id]
                    b = [str(n) for n in li]
                    print(''.join(b))
                    num+=1
    print('以上是能组成的所有互不相同且无重复数字的三位数\n一共:',num,'个')

two_question01()

# 方法二,利用集合去重特性
def two_question02():
    li = []
    for i in range(1,5):
        for j in range(1,5):
            for id in range(1,5):
                li1 = [i, j, id]
                s=set(li1)
                if len(s) == 3:
                    li.append(li1)
                    b = [str(n) for n in li1]
                    print(''.join(b))
    print('以上是能组成的所有互不相同且无重复数字的三位数\n一共:',len(li),'个')

# two_question02()

# 方法三:利用字典key值唯一特性
def two_question03():
    num = 0
    for i in range(1,5):
        for j in range(1,5):
            for id in range(1, 5):
                d = {}
                d.update({i: i, j: j, id: id})
                if len(d) == 3:
                    li=list(d.keys())
                    b = [str(n) for n in li]
                    print(''.join(b))
                    num += 1
    print('以上是能组成的所有互不相同且无重复数字的三位数\n一共:',num,'个')

# two_question03()

# 方法四
# 算法分析  减少循环的次数降低时间复杂度 使用同余定理
# 1,2,3,4四个数字组成排列数每个数字位于百位有四种情况用for循环给位于百位上的数赋值
# 每种情况可以组成六个不同的数
# 采用同余定理:它的余数为1,2,3 ,当余数为0的时候是它变为4
def two_question04():
    li = []
    num = 0
    for i in range(1, 5):
        li.clear()
        li.append(i)
        if (i + 1) % 4 == 0:
            li.append(4)
        else:
            li.append((i + 1) % 4)
        if (i + 2 + 4) % 4 == 0:
            li.append(4)
        else:
            li.append((i + 2 + 4) % 4)
        if (i + 3 + 4) % 4 == 0:
            li.append(4)
        else:
            li.append((i + 3 + 4) % 4)
        num1 = li[0] * 100 + li[1] * 10 + li[3];
        num2 = li[0] * 100 + li[1] * 10 + li[2];
        num3 = li[0] * 100 + li[2] * 10 + li[1];
        num4 = li[0] * 100 + li[2] * 10 + li[3];
        num5 = li[0] * 100 + li[3] * 10 + li[1];
        num6 = li[0] * 100 + li[3] * 10 + li[2];
        print('\n',num1,'\n',num2,'\n',num3,'\n',num4,'\n',num5,'\n',num6)
        num+=6
    print('以上是能组成的所有互不相同且无重复数字的三位数\n一共:',num,'个')

# two_question04()
  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值