|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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
复制代码
看注释吧,从你问题看出来你对字典这个概念还了解的有点少哈~:
- 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/
解题官方好像一般没给出,但是广大网友有发布自己的解题过程,而且如果你也有好的解题过程也可以发布上去
|
|