今天的面试题,用python实现。python3.4;使用工具pythoncharm!
#从1000人中随机抽取10个人,被抽中的人会被杀死。只有一个硬币决定抽取谁;写个程序实现,一定要保证每个人被抽中的概率相等
import random
#模拟抛硬币
def coin():
if random.randint(0,1) == 1 :
return True
else:
return False
#递归实现,从一组人中选出一个人,被杀害。每个人都抛硬币,如果抛到反面(false),就可能被杀害;最终只有自己抛出反面,就会被杀害
def loser(people):
#挑选出抛掷反面的人
unlucky = []
#抛到反面的人,就被放入不幸运的队列
for i in people:
if coin()==False:
unlucky.append(i)
#如果大家都是幸运的,那就重新大家都再抛一次
if len(unlucky) == 0:
return loser(people)
#如果大于1个人抛到反面,那就所有抛到反面的人再抛一次
if len(unlucky) > 1 :
return loser(unlucky)
#如果抛到反面的人只有一个,那就是这个人,是倒霉蛋了
if len(unlucky) ==1:
return unlucky[0]
if __name__ == '__main__':
#一共有1000人,分成10组;每一组有100个人,每一组进行抛硬币选中一个倒霉蛋
for i in range(0,10):
person = []
#每个人都用编号来标注,从1到1000
for j in range(1,101):
person.append(i*100+j)
# 一组100个人,调用loser函数找到倒霉蛋
a=loser(person)
print("被选中的是"+str(a))
总结:
1.关于递归函数,开始实现的时候,因为没有在所有的可能都返回return,导致最后拿到的参数是none;感谢百度,找到了原因!!
2.另外,实现过程中忘记了数组是从0开始的,有越界,不过这个问题很容易定位的
3.发现了python递归的深度是900多层,也是百度知道的。一开始递归函数没有写正确,就会导致一直递归的问题~