| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1742 人关注过本帖, 1 人收藏
标题:问为啥我的测试结果只有一个,为啥我写的循环没有用
只看楼主 加入收藏
D1419782499
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2021-1-4
结帖率:0
收藏(1)
已结贴  问题点数:20 回复次数:6 
问为啥我的测试结果只有一个,为啥我写的循环没有用
任务描述
数字全排列问题:
  任意给出从1到N的N个连续的自然数,求出这N个自然数的各种全排列。如N=3时,共有以下6种排列方式:
     123,132,213,231,312,321。
注意:数字不能重复,N由键盘输入(N<=9)。

本关任务:利用递归,栈的思想编程实现数字全排问题的求解。。

相关知识
栈又称为后进先出(Last In First Out)的线性表,简称LIFO结构

编程要求
根据提示,在右侧编辑器补充完善代码,输出数字全排列的全部组合及产生的全排列总数。

测试说明
平台会对你编写的代码进行测试:

测试输入:
[2,5,7]
预期输出:
[2, 5, 7]
[2, 7, 5]
[5, 2, 7]
[5, 7, 2]
[7, 2, 5]
[7, 5, 2]
6



data=[]#空列表类似空栈
count=0#全排列总数变量的初始化
def perm(lst,data):
#*******************begin****************
    global count
    if len(lst)==1:
        count+=1
        data+=lst
        print(data)
        del data[-2:]
    else:
        for i in lst:
            data.append(i)
            newlst=lst
            newlst.remove(i)
            perm(newlst,data)


#*******************end*******************
lst=eval(input())
perm(lst,data)
print(count)



我的测试结果
[2, 5, 7]
1
搜索更多相关主题的帖子: 数字 count data 排列 测试 
2021-01-04 23:56
apull
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:三体星系
等 级:版主
威 望:216
帖 子:1479
专家分:9035
注 册:2010-3-16
收藏
得分:10 
你这lst都给newlst.remove(i)完了,在输出啥呢。
2021-01-05 10:58
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:10 
程序代码:
import copy
count=0#全排列总数变量的初始化
def perm(lst,data,idx,num):
    global count
#*******************begin****************
    if len(lst)==num:
        count+=1
        print(data)
    else:
        for e in lst:
            if data.count(e)<=0:
                arr=copy.deepcopy(data)
                arr.append(e)
                perm(lst,arr,idx,num+1)


#*******************end*******************
lst=eval(input())
data=[]
idx=[]
perm(lst,data,idx,0)
print(count)

剑栈风樯各苦辛,别时冰雪到时春
2021-01-05 12:00
D1419782499
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2021-1-4
收藏
得分:0 
回复 2楼 apull
但是我有一组输出结果呀
2021-01-05 15:02
D1419782499
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2021-1-4
收藏
得分:0 
回复 2楼 apull
应该用newlst=lst.copy()
是的是的
谢谢大佬
2021-01-05 15:21
D1419782499
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2021-1-4
收藏
得分:0 
回复 2楼 apull
data=[]#空列表类似空栈
count=0#全排列总数变量的初始化
def perm(lst,data):
#*******************begin****************
    global count
    if len(lst)==1:
        count+=1
        data+=lst
        print(data)
        del data[-2:]
    else:
        for i in lst:
            data.append(i)
            newlst=lst.copy()
            newlst.remove(i)
            perm(newlst,data)
        del data[-1]


#*******************end*******************
lst=eval(input())
perm(lst,data)
print(count)


我的输出结果
[2, 5, 7]
[2, 7, 5]
[5, 2, 7]
[5, 7, 2]
[7, 2, 5]
[7, 5, 2]
Traceback (most recent call last):
  File "sy13/递归之数字全排列step4.py", line 22, in <module>
    perm(lst,data)
  File "sy13/递归之数字全排列step4.py", line 17, in perm
    del data[-1]
IndexError: list assignment index out of range


这是为啥呀??跪求
2021-01-05 15:38
apull
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:三体星系
等 级:版主
威 望:216
帖 子:1479
专家分:9035
注 册:2010-3-16
收藏
得分:0 
del data[-1:]
2021-01-05 17:45
快速回复:问为啥我的测试结果只有一个,为啥我写的循环没有用
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015491 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved