作者liangjr (aaa)
看板Programming
标题Re: [问题] 面试遇到的题目
时间Wed Aug 13 09:26:54 2008
※ 引述《sunneo (艾斯寇德)》之铭言:
: 我提供一下我会尝试的做法,首先我先产生31个大小的阵列,里面有数字0~30
: 以及一个back,为阵列最後一个元素的索引位置。
: 如果back为0 则回传0
: n = 产生乱数[ 1 , back ];
: 回传值 = 阵列[ n ];
: 对调(阵列[ n ] 跟阵列[ back ]);
: --back;
: 如果back为0,则清空阵列。
: 回传回传值;
: 外面检查回传值是否为0,0表示座位已满。
: 这是在座位没有0号的情形。
: 有0号的话则以丢出exception的方式。
java我很久没写了 倒是用python写了一下
在class initialize的时候产生乱数阵列
每次Reserve只需回传乱数阵列里面index指到的元素
并且index--就好了
越到0就终止
--
#!/usr/bin/python
import os
import sys
import random
NUM_SEATS = 30
class Reservation:
_num_seats = 0
_seat = []
_current_seat = 0
def __init__(self, num_seats):
self._num_seats = num_seats
def Init(self):
for i in range(self._num_seats+1):
self._seat.append(i)
self.__RandomizeSeats(self._seat, self._num_seats)
self._current_seat = self._num_seats
def __RandomizeSeats(self, seats, num_seats):
for i in range(num_seats, 0, -1):
rand = random.randrange(1, i+1)
seats[i],seats[rand] = seats[rand],seats[i]
def Reserve(self):
if self._current_seat:
ret = self._seat[self._current_seat]
self._current_seat -= 1
return ret
else:
return 0
def main():
r = Reservation(NUM_SEATS)
r.Init()
while 1:
in_txt = raw_input("Reserve seat? [y/n] ")
if in_txt=="y" or in_txt=="Y":
seat_num = r.Reserve()
if seat_num:
print "Your seat number is %d" % seat_num
else:
print "Sorry, no more seats"
return 0
else:
print "Thanks for using reserve system"
print "You reserved %d/%d seats" % \
(r._num_seats-r._current_seat, r._num_seats)
return 0
if __name__ == "__main__":
sys.exit(main())
--
http://nigel.twbbs.org
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 76.95.86.77
1F:推 joetsai:没学过python 有些部分看不太懂 =.="a 122.125.232.12 08/13 10:10
2F:→ joetsai:不过 很谢谢你~~~ 122.125.232.12 08/13 10:10