【py题设】幸运数字

4849 words

题干:

小明对神秘学很感兴趣,想要计算自己在一周中每天的幸运数字。他随机生成了一个包含七个小列表的大列表A,每个小列表代表一星期中的第几天(以星期一为第一天计算),其中包含十个元素。幸运数字的计算方式如下:

①在当日对应的列表中取一个初始元素,求与它差值最小的左邻居,若多个左邻居差值相等,则选择距离最近的元素。例如列表[1,5,3]中,元素3符合要求的左邻居为元素5,差值为2,距离为1;

②没有特殊情况则当日的初始元素位置为前一日初始元素的位置+1,周一选择第一个小列表中位置为1的元素作为初始元素,而周二选择第二个小列表中位置为2的元素作为初始元素,若某日的初始元素位置为9,则次日初始元素位置为0;

③若连续两天初始元素与被选中的左邻居距离相等,则出现特殊情况。如周二原本选择位置为2的元素作为初始元素,其被选中的左邻居与其距离为1,周一初始元素与左邻居距离也为1,则进入特殊情况,周二选择位置为3的元素。若直到选取位置为9的最后一个元素都处于距离相等的特殊情况,则当日幸运数字为0;

④若前一日幸运数字为0,则当日初始元素位置为前二日初始元素位置+2;

⑤单日小列表中没有重复数字,数字范围在[1,100];

⑥幸运数字为当日初始数字及被选中左邻居之和。

请完成程序填空。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
def find(n, A):
value = [110]*(n-1)
dis = [110]*(n-1)
result = []
for i in range(1,n):
for j in range(i):
if abs(A[i]-A[j])<=value[i-1]:
value[i-1]=abs(A[i]-A[j])
dis[i-1]=i-j
result.append([value[i-1],dis[i-1]])
return result

def week(A):
last = -1
cs = 0
lastcs = 0
for i in range(7):
dis=find(len(A[i])-1,A[i])[cs][1]
while cs<8 and last==dis:
cs+=1
dis=find(len(A[i])-1,A[i])[cs][1]
if cs<9:
last=dis
lastcs=cs
A[i][10][1]=dis
A[i-1][10][0]=cs+1
cs=(cs+1)%9
else:
cs=_____①_____
print(A)
for i in range(7):
if A[i][A[i-1][10][0]]!=-1:
print(_________②_________)
else:
print(0)

A=[]
for i in range(7):
B=[]
while len(B)<10:
a=random.randint(1,100)
_____③____:
B.append(a)
B.append([-1,-1])
A.append(B)
week(A)

题解:

(lastcs+2)%9

A[i][A[i-1][10][0]-A[i][10][1]]+A[i][A[i-1][10][0]]

if a not in B

Comments
bunny