|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 Peteryo01223 于 2021-5-24 11:56 编辑
题目:500个小孩,围成一个圈。从第一个小孩开始计数,每次逢3,或3的倍数,出圈,如:3/6/27/468等等。直到最后剩一个小孩,请问他(她)最初的编号是多少?
答案:
- # 第一个类:kid
- # 第二个类:circle
- # kid 属性:编号gid,lefthand、righthand
- # 圈属性:head 和 tail。
- # 圈的行为:加入(add)一个小孩,移除(remove)一个小孩。
- class Kid:
- def __init__(self, gid):
- self.gid = gid # 小孩属性之编号
- self.left = None # 小孩属性之左手
- self.right = None # 小孩属性之右手
- class Circle:
- # 初始化的时候,定义圈的头和尾
- def __init__(self, count):
- self.head = None
- self.tail = None
- for i in range(count):
- self.add(Kid(i+1))
- def add(self, kid):
- # 向圈里,加入一个小孩
- if self.head is None and self.tail is None:
- self.head = kid
- self.tail = kid
- kid.left = kid
- kid.right = kid
- else:
- kid.left = self.head
- kid.right = self.tail
- self.head.right = kid
- self.tail.left = kid
- self.tail = kid
- def remove(self, kid):
- # 从圈里面移除一个小孩
- if kid is self.head:
- self.head = kid.left
- if kid is self.left:
- self.tail = kid.right
- kid.left.right = kid.right
- kid.right.left = kid.left
- kid.left = None
- kid.right = None
- circle = Circle(500)
- cur = circle.head # 指针指向开头
- step = 1
- while circle.head is not circle.tail:
- # 当圈里不只一个小孩的时候,就继续
- cur = cur.left
- if step % 3 == 0:
- circle.remove(cur.right)
- step += 1
- print(circle.head.gid)
复制代码
报错内容:
- D:\PycharmProjects\learnpython\venv\Scripts\python.exe D:/PycharmProjects/learnpython/ch7/20210524a.py
- Traceback (most recent call last):
- File "D:/PycharmProjects/learnpython/ch7/20210524a.py", line 58, in <module>
- circle.remove(cur.right)
- File "D:/PycharmProjects/learnpython/ch7/20210524a.py", line 41, in remove
- if kid is self.left:
- AttributeError: 'Circle' object has no attribute 'left'
复制代码
看不懂报错内容,请高手们指点迷津,谢谢~此题难度太大了,我实在不会改。
Circle 类中的 remove 方法的第二个 if 条件 self.left 改成 self.tail 即可
- def remove(self, kid):
- # 从圈里面移除一个小孩
- if kid is self.head:
- self.head = kid.left
- if kid is self.tail:
- self.tail = kid.right
- kid.left.right = kid.right
- kid.right.left = kid.left
- kid.left = None
- kid.right = None
复制代码
|
|