#?導入random模塊
import?random
#?定義壹個人椅的類
class?ManAndBench:
def?__init__(self,?n_bench):
self.bench_num?=?n_bench
#?依次已經被占用的座位號
self.break_point?=?[]
def?print_bench(self):
#?定義全0數組作為長椅
pt_str?=?[0?for?_?in?range(self.bench_num)]
#?按照占用的作為號,重寫長椅數字
for?i,?item?in?enumerate(self.break_point):
#?長椅的第[作為號]賦值為第i+1個人
pt_str[item]?=?i+1
brk_num?=?len(self.break_point)
if?brk_num?==?0:
print("長椅為空:",?pt_str)
else:
print("{:2d}號男人:?{}".format(brk_num,?pt_str))
def?next_man(self):
#?如果是第壹個人,使用隨機占座
if?len(self.break_point)?==?0:
fst?=?random.randint(0,?self.bench_num?-?1)
self.break_point.append(fst)
else:
brk_num?=?len(self.break_point)
#?產生已經被占座的個數+1的全零數組,用於空的位置長度計數
block_size?=?[0?for?_?in?range(brk_num?+?1)]
#?統計每個空位置的長度
tmp?=?0
for?i?in?range(self.bench_num):
#?如果第i個作為沒有被占用,則第tmp個數組加1
if?i?not?in?self.break_point:
block_size[tmp]?+=?1
#?否則,tmp加1,統計下壹個間隔段的長度
else:
tmp?+=?1
#?找出最大長度,計算最大長度塊的序號
max_block?=?max(block_size)
max_index?=?block_size.index(max_block)
#?計算最大長度塊在整個長椅中的分割點
start?=?0
for?i?in?range(max_index):
start?+=?block_size[i]+1
self.break_point.append(start?+?max_block?//?2)
c?=?int(input("請輸入椅子的數量:"))
while?True:
m?=?int(input("請輸入人的數量:"))
if?m?<=?c:
break
else:
print("人數量大於椅子數量,請重新輸入!")
#?引用定義的類
mab?=?ManAndBench(c)
#?打印長椅
mab.print_bench()
#?每次坐壹個人,打印壹次
for?_?in?range(m):
mab.next_man()
mab.print_bench()