【无标题】

题目:

一摞硬币共有m枚,每一枚都是正面朝上。取 下最上面的一枚硬币,将它翻面后放回原处。然后取下最上面的2枚硬币,将他们一起翻面后再放回原处。再取3枚,取4枚……直至m枚。然后再从这摞硬币最上 面的一枚开始,重复刚才的做法。这样一直做下去,直到这摞硬币中的每一枚又都是正面朝上为止。例如,m为1时,翻两次即可。m为2时,翻3次即可;m为3 时,翻9次即可;m为4时,翻11次即可;m为5时,翻24次即可;…;m为30时,翻899次即可;…

输 入:

  仅有的一个数 字 是这摞硬币的枚数m,0<m<1000。

输 出:

  为了使这摞硬币中的每一枚又都是正面朝上所必 需翻的次数。

#假设硬币正面朝上为a,反面朝上为b
n = int(input('输入硬币数'))
lis = ['a'] * n
k = 0
def fun(n):
    global k, lis
    for i in range(1, n + 1):
        k = k + 1
        lis = lis[0: i][::-1] + lis[i: n + 1]
        for j in range(i):
            if lis[j] == 'a':
                lis[j] = 'b'
            elif lis[j] == 'b':
                lis[j] = 'a'
        
        if lis.count('a') == n:
            return k
        
    return fun(n)
print(fun(n))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值