鱼C论坛

 找回密码
 立即注册
查看: 1673|回复: 2

[已解决]约瑟夫生存小游戏-注释

[复制链接]
发表于 2020-7-6 16:16:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

30 个人在一条船上,超载,需要 15 人下船。
于是人们排成一队,排队的位置即为他们的编号。
报数,从 1 开始,数到 9 的人下船。
如此循环,直到船上仅剩 15 人为止,问都有哪些编号的人下船了呢?

题目出自:https://www.runoob.com/python3/python-joseph-life-dead-game.html

【1】
代码看不懂,能否帮忙加个注释,感谢

【2】
哪里有这类的题目可以做,带解释的
买书/买课也可以,最主要是答案有注释,感谢。


people={}
for x in range(1,31):
    people[x]=1   #这个[ ]是咋回事?这个[ ]是什么格式
check=0
i=1
j=0  #为什么要设置2个
while i<=31:
    if i == 31:
        i=1 #等于31的时候,i又要等于1??
    elif j == 15:   #j是干嘛用的,为啥是15的时候break?
        break
    else:
        if people[i] == 0: #这到底是哪个等于零,集合people里的元素i等于0??
            i+=1 #接下来的都看不懂……
            continue
        else:
            check+=1
            if check == 9:
                people[i]=0
                check = 0
                print("{}号下船了".format(i))
                j+=1
            else:
                i+=1
                continue
最佳答案
2020-7-6 16:42:23


【1】代码看不懂,能否帮忙加个注释,感谢

看注释吧,从你问题看出来你对字典这个概念还了解的有点少哈~:
people = {}  # 设置一个字典,用来计下人

for x in range(1, 31):  # 这边等于把键设置为人排队的顺序了
    people[x] = 1  # 字典键值对赋值,[]里面的是 key 键,等号右边的是 value 值
    # 这里实际上把默认值都设置为了 1 表示这个人在船上,0表示这个人已经下船了

check = 0   # check 用来统计叫到的号码
i = 1  # 这个就是人的编号,最大 31 号
j = 0  # 为什么要设置2个
while i <= 31:
    if i == 31:
        i = 1  # 等于31的时候,说明第一次叫号数结束,重新开始下一次的循环
    elif j == 15:  # j 是用来统计下船的人数的,当15个人下船了说明满足题意了,所以退出循环
        break
    else:
        if people[i] == 0:  # 如果值为 0 表示这个人已经下船,所以 i + 1后 continue 跳过这个人的保数 重新开始下次循环
            i += 1
            continue
        else:      # 如果 if 条件不满足则执行 else 的代码块,if 不成立 说明的就是 这个人在船上
            check += 1    # 这个人报数一位数
            if check == 9: # 判断是否是报到 9 号,若是 把这个人的 value 设置为 0 表示下船
                people[i] = 0 
                check = 0  # 重新开始下轮的的报号
                print("{}号下船了".format(i))  # 打印下船的人的编号
                j += 1  # 统计下船人数 +1
            else: # 如果check 不等于 9 说明这个人还不用下船,那么开始下一次的循环 
                i += 1
                continue


【2】哪里有这类的题目可以做,带解释的
买书/买课也可以,最主要是答案有注释,感谢。


Leetcode 力扣 :https://leetcode-cn.com/problemset/all/

解题官方好像一般没给出,但是广大网友有发布自己的解题过程,而且如果你也有好的解题过程也可以发布上去



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-6 16:42:23 | 显示全部楼层    本楼为最佳答案   


【1】代码看不懂,能否帮忙加个注释,感谢

看注释吧,从你问题看出来你对字典这个概念还了解的有点少哈~:
people = {}  # 设置一个字典,用来计下人

for x in range(1, 31):  # 这边等于把键设置为人排队的顺序了
    people[x] = 1  # 字典键值对赋值,[]里面的是 key 键,等号右边的是 value 值
    # 这里实际上把默认值都设置为了 1 表示这个人在船上,0表示这个人已经下船了

check = 0   # check 用来统计叫到的号码
i = 1  # 这个就是人的编号,最大 31 号
j = 0  # 为什么要设置2个
while i <= 31:
    if i == 31:
        i = 1  # 等于31的时候,说明第一次叫号数结束,重新开始下一次的循环
    elif j == 15:  # j 是用来统计下船的人数的,当15个人下船了说明满足题意了,所以退出循环
        break
    else:
        if people[i] == 0:  # 如果值为 0 表示这个人已经下船,所以 i + 1后 continue 跳过这个人的保数 重新开始下次循环
            i += 1
            continue
        else:      # 如果 if 条件不满足则执行 else 的代码块,if 不成立 说明的就是 这个人在船上
            check += 1    # 这个人报数一位数
            if check == 9: # 判断是否是报到 9 号,若是 把这个人的 value 设置为 0 表示下船
                people[i] = 0 
                check = 0  # 重新开始下轮的的报号
                print("{}号下船了".format(i))  # 打印下船的人的编号
                j += 1  # 统计下船人数 +1
            else: # 如果check 不等于 9 说明这个人还不用下船,那么开始下一次的循环 
                i += 1
                continue


【2】哪里有这类的题目可以做,带解释的
买书/买课也可以,最主要是答案有注释,感谢。


Leetcode 力扣 :https://leetcode-cn.com/problemset/all/

解题官方好像一般没给出,但是广大网友有发布自己的解题过程,而且如果你也有好的解题过程也可以发布上去



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-6 16:51:12 | 显示全部楼层
people={}
for x in range(1,31):
    people[x]=1   #这个[ ]是咋回事?这个[ ]是什么格式//开了一个people数组,为people中每个元素赋值为1
check=0   #表示1到9的遍历
i=1
j=0  #为什么要设置2个//i表示30个人标号,j表示下船人数。
while i<=31:
    if i == 31:
        i=1 #等于31的时候,i又要等于1??//当i=31时遍历一遍结束,重头开始重新遍历
    elif j == 15:   #j是干嘛用的,为啥是15的时候break?// j表示下船人数,下船15人结束
        break
    else:
        if people[i] == 0: #这到底是哪个等于零,集合people里的元素i等于0??//people中第i个元素等于0,等于0表示这个位置的人已经下船了
            i+=1 #接下来的都看不懂……  //检测下一个人
            continue
        else:
            check+=1
            if check == 9:     #遇9下船
                people[i]=0
                check = 0   #下船以后再次从1到9遍历
                print("{}号下船了".format(i))
                j+=1      #下船人数加1
            else:
                i+=1      #同上
                continue
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-20 03:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表