Pythonは、サルの王を選択する問題を解決します。15匹のサルが円を形成して王を選択し、7匹に報告するサルは、最後のサルが王になるまで排除されます。質問:どのサルが王になりますか?

言うまでもありませんが、非常に単純です。コードに移動するだけです。

## 给猴子编号
AllMonkey = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]

## 循环出栈
num = 0 #只要是为了清楚显示当前循环是第n次循环
while True:
    for i in range(1,7):
        AllMonkey.append(AllMonkey[0]) #第一次循环第一个元素为1,将第一个添加到列表后面,同理,第二次循环就是将2添加到列表的最后面
        del(AllMonkey[0])  #第一次循环删除列表的第一个元素,也就是1,然后2就变成了列表的第一个元素。同理,第二次循环就删除的2
        if i == 6:   #循环了6次之后,满足了这个条件(i == 6)
            num += 1  #循环次数加1
            print('第\033[1;31m%d\033[0m次出局猴子的编号为: \033[1;31m%d\033[0m' % (num, AllMonkey[0]))
            AllMonkey.pop(0) #循环6次之后,第7次将第7个元素出栈,删除第七个元素,继续循环下去
    if len(AllMonkey)==1: #当列表里面只剩下一个元素的时候,这时候就是我们要选出来的大王
        break #满足条件退出循环
print()
print('\033[1;31m猴子大王的编号为: %d\033[0m' % int(AllMonkey[0])) #输出猴子大王的编号

出力は次のとおりです。
ここに画像の説明を挿入
タイトルを変更した場合:15匹のサルがキングを選択し、n匹のサルがキングを選択します。他の条件は同じままで、非常に簡単です。コードを少し変更するだけです。

## 给猴子编号
## 只要是这一步需要给猴子编号,也就是创建一个列表
AllMonkey = list(range(1, int(input("请输入猴子的个数:")) + 1))

## 循环出栈
num = 0
while True:
    for i in range(1,7):
        AllMonkey.append(AllMonkey[0])
        del(AllMonkey[0])
        if i==6:
            num += 1
            print('第\033[1;31m%02d\033[0m次出局猴子的编号为: \033[1;31m%02d\033[0m' % (num, AllMonkey[0]))
            AllMonkey.pop(0)
    if len(AllMonkey)==1:
        break
print()
print('\033[1;31m猴子大王的编号为: %d\033[0m' % int(AllMonkey[0]))

出力は次のとおりです。
ここに画像の説明を挿入

コメントやディスカッションは大歓迎です!

おすすめ

転載: blog.csdn.net/weixin_44901564/article/details/106375908