Q39反复排序

E:/GitHub/suanfaquti/Q39反复排序.py
'''
问题描述
1-n共n个数字。如果第1个数字为k时,则把前k个数逆序,一直重复这个操作。
例如数字是362154时,变化过程如下:
362154-->263154->623154-->451326-->315426-->513426-->243156-->
423156-->132456,这种情况下,共变化 8 次后就无法继续变化了。
问题
求当 n = 9 时,使卡片顺序变化次数最多的 9 张卡片的顺序。

分析

'''
from itertools import permutations
from time import clock

t1=clock()
n=9
a=permutations(range(1,1+n),n)
d={}
print(clock()-t1)
def dfs(cards):
    if cards in d.keys():
        return d[cards]
    m=cards[0]
    if m==1:
        d[cards]=0
        return 0
    c=list(cards)
    c=tuple(c[:m][::-1]+c[m:])
    cnt=dfs(c)+1
    d[cards]=cnt
    return cnt


t1=clock()
for i in a:
    dfs(i)
print(clock()-t1)                   #0.9
maxv=max(d.values())
ind=list(d.values()).index(maxv)
print(list(d.keys())[ind],maxv)     #(6, 1, 5, 9, 7, 2, 8, 3, 4) 30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值