直接打码,输出 百十个 三位不重复的三位数
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()