幸运号码
类型:随机数
描述
学校元旦活动有一个抽奖环节,每位同学按入场顺序被分配一个号码,即每个人的号码为他是第几位入场。活动进行到抽奖环节时,主持人先公布活动总人数 n 并找一名同学随便说一个整数用作随机数的种子,然后从 3 到 2n-1 之间获得一个随机数(包括 3 和 2n-1)做为幸运数字,如果有两个人的号码之和与这个幸运数字相等,就会奖励这两个人神秘礼物。如果无人获奖,则重新抽取幸运数字;如果有多组号码符号要求,由包含最小数的一组号码中奖;一旦有人获奖,则抽奖环节结束。
输入格式
在同一行内输入 2 个不超过100的正整数,第一个代表参与活动总人数,第二个为随机数种子。
输出格式
在同一行内输出幸运号码和中奖的两个数字,用空格分隔,中奖数字按从小到大的顺序输出。
示例
输入:
100 100
输出:
40 1 39
参考代码
# 方法一
# -------- ------- --------
# @File : 幸运号码.py
# @Author : 赵广辉
# @Contact: vasp@qq.com
# @Company: 武汉理工大学
# @Version: 1.0
# @Modify : 2021/12/23 9:11
# Python程序设计基础,高等教育出版社
# -------- ------- --------
import random
def choose(person):
"""接收总人数person,返回一个包含幸运数字和中奖同学列表的元组"""
lucky_number = random.randint(3, 2 * person-1) # 得到幸运数字
ls = []
for i in range(1, person + 1):
if 0 < lucky_number - i < person:
ls.append(sorted([i, lucky_number - i]))
return lucky_number, ls
if __name__ == '__main__':
people, the_seed = map(int, input().split())
random.seed(the_seed)
while True:
score = choose(people)
if len(score[1]) != 0:
break
result = sorted(score[1])
print(score[0], *result[0])
# 方法二
import random
n,s = map(int,input().split())
ls = list(range(1,n+1))
random.seed(s)
flag = 0
while True:
lucky = random.randint(3, 2*n-1)
for i in ls:
if lucky-i in ls and i != lucky-i:
print(lucky,i,lucky-i)
flag = 1
break
if flag == 1:
break