您好,欢迎来到爱go旅游网。
搜索
您的当前位置:首页【PTA-python】第6章-8 输出全排列 (20 分)

【PTA-python】第6章-8 输出全排列 (20 分)

来源:爱go旅游网

分析

题目

输入整数n(3<=n<=7),编写程序输出1,2,…,n整数的全排列,按字典序输出。
输入格式:

一行输入正整数n。
输出格式:

按字典序输出1到n的全排列。每种排列占一行,数字间无空格。

解法

解法1

import math
n=int(input())
num=[]
for i in range(n):
    num.append(str(i+1))#将num扩充为字符列表,存储着所有的元素
def f(x,s=""):
    s+=str(x)
    if len(s)<n:#s的长度作为循环判断条件
        for i in num:
            if i not in s:#取那些不在s里的字符,连接起来
                f(i,s)
    else:
        print(s)
for i in range(1,n+1):
    f(i)

解法2

另有方法暴力枚举,比如输入3,从100开始到400的数据。建立一个字符集,对每个数据,分割,如果和字符集完全相同,那么就是相同的,可以输出。

import math
n=int(input())
num=[]
num=set([str(i) for i in range(1,n+1)])    #数字库
for i in range(pow(10,n-1),(n+1)*pow(10,n-1)):#枚举范围
    i=str(i)
    s=set()#s是个集合
    for j in i:
        s.add(j)#添加字符
    if s==num:#集合与集合才能比较
        print(int(i))

另外也有用random.shuffle()打乱次序,进行输出的

t=[]
s=set()
for i in range(1,n+1):
    t.append(str(i))
all=factorial(n)#n个数字有n!种排列
while len(s)<all:
    random.shuffle(t)#每次都打乱
    s.add("".join(t))#拼成字符串,加到集合
s=sorted(s)#按照字典序排列

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- igat.cn 版权所有 赣ICP备2024042791号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务