测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A46357. 要求:设计一个算法,枚举排列问题。输入 1-n 的第 1 个排列,如 1 2 3,按照大小输出 1~n 的所有排列,并统计全部排列总数。根据上述算法思想,补全下列代码。描述:输入 1-n 的第 1 个排列,如 1 2 3,按照大小输出 1~n 的所有排列。函数名:perm(n,begin,end)参数表:n -- 整数 n,begin -- 指向排列的第一个元素,end-- 指向排列的最后一个元…

填空题 较难

题目描述

要求:设计一个算法,枚举排列问题。输入 1-n 的第 1 个排列,如 1 2 3,

按照大小输出 1~n 的所有排列,并统计全部排列总数。

根据上述算法思想,补全下列代码。

描述:输入 1-n 的第 1 个排列,如 1 2 3,按照大小输出 1~n 的所有排列。

函数名:perm(n,begin,end)

参数表:n -- 整数 n,begin -- 指向排列的第一个元素,end-- 指向排列的最

后一个元素。

返回值:输出 1-n 的所有排列方式,每行一个排列,按从小到大。

示例:当输入 1 2 3 时,返回:

[1, 2, 3]

[1, 3, 2]

[2, 1, 3]

[2, 3, 1]

[3, 2, 1]

[3, 1, 2]

排列总数是:6 个!

参考答案

COUNT=0 def perm(n,begin,end): global COUNT if begin>=end: print (n) COUNT +=1 else: i=begin for num in range(begin,end): n[num],n[i]=n[i],n[num] perm(n,begin+1,end) n[num],n[i]=n[i],n[num] arr = input("1-n 的第 1 个排列:") n = [int(n) for n in arr.split()] perm(n,0,len(n)) print ("排列总数是:%d 个!"% COUNT)

答案解析

① begin>=end: 或等效答案;(2 分)

② range(begin,end) 或等效答案;(2 分)

③ perm(n,begin+1,end) 或等效答案;(2 分)

④ perm(n,0,len(n)) 或等效答案;(2 分)

上一题 下一题