# 方法一,利用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()
有1 2 3 4 这四个数字,设计程序计算能组成多少个互不相同且无重复数字的3位数这里我总结了四种方法来实现,还在继续研究中,后面会持续更新,基础打好,才能学好编程,持续努力的小白# 方法一,利用if判断限定条件def two_question01(): num = 0 for i in range(1,5): for j in range(1,5): ...