zl程序教程

您现在的位置是:首页 >  其他

当前栏目

【基础入门题056】数字排列(一)

基础入门 数字 排列
2023-09-14 09:01:29 时间

【基础入门题】2021.12.22

有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?输出这些三位数。

编程语言:包括但不限于Python
题目来源:派森特给站每日刷题频道 


方法一: 计数

count = 0
for a in range(1,5):
    for b in range(1,5):
        for c in range(1,5):
            if a!=b and a!=c and b!=c:
                print(a*100+b*10+c, end='\n' if count%6==5 else '\t')
                count += 1

print('个数:',count)

123    124    132    134    142    143
213    214    231    234    241    243
312    314    321    324    341    342
412    413    421    423    431    432
个数: 24 

方法二: 用数组

nums = []
for a in range(1,5):
    for b in range(1,5):
        for c in range(1,5):
            if a!=b!=c!=a:  #即: a!=b and a!=c and b!=c:
                nums.append(a*100+b*10+c)

print('个数:',len(nums))
for i,n in enumerate(nums):
    print(n, end='\n' if i%6==5 else '\t')

个数: 24
123    124    132    134    142    143
213    214    231    234    241    243
312    314    321    324    341    342
412    413    421    423    431    432

方法三: continue

nums = []
for a in range(1,5):
    for b in range(1,5):
        if b==a: continue
        for c in range(1,5):
            if c==a or c==b: continue
            nums.append(a*100+b*10+c)

print('个数:',len(nums))
for i,n in enumerate(nums):
    print(n, end='\n' if i%6==5 else '\t')

方法四:本质是排列,结果总个数=4x3x2=24

from itertools import permutations as perm
print('个数:',len(list(perm([1,2,3,4],3))))
for i,n in enumerate(perm([1,2,3,4],3)):
	print(n[0]*100+n[1]*10+n[2], end='\n' if i%6==5 else '\t')

方法五:自定义排列函数

def perm(arr, pos=0):
    if pos==len(arr): yield arr
    for i in range(pos,len(arr)):
        arr[pos],arr[i] = arr[i],arr[pos]
        for _ in perm(arr, pos+1): yield _
        arr[pos],arr[i] = arr[i],arr[pos]

for i,n in enumerate(perm([1,2,3,4])):
    print(n[0]*100+n[1]*10+n[2], end='\n' if i%6==5 else '\t')

print('个数:',i+1)