过年了,村里要庆祝一下。村长对村民说:村里有一笔钱作为奖金。让每个人写一个纸条上来,谁写的数与奖金最接近,就算猜中,这笔奖金就归谁,如果有多个人猜中,则平分这笔钱。现在让我们来写一段程序算算都有哪些人得到了奖金?得到多少?
输入:第一行包含2个整数 n,m,分别表示村民人数和村里的奖金总数。 第二行包含n个整数,整数之间以一个空格分开。表示1号,2号,。。。,n号村民猜测的奖金数。(1<=n<=5000)
输出:输出分两行。 第一行包含若干整数,表示得到奖金的村民编号(数据之间有一个空格,最后一个数后面无空格!!!), 第二行包含一个实数(保留1位小数),表示人均奖金金额。
l,m = input().split()
l,m = int(l), int(m)
w = [int(x) for x in input().split()]
f = []
cnt = 0
st = “”
for i in range(l):
f.append(abs(m-w[i]))#把差值放入空列表,并绝对值化
for i in range(len(f)):
if f[i] == min(f):#遍历列表,如果有最小值,把i放入字符串中
st+=str(i+1)
cnt+=1
print(" ".join(st))
print(’%.1f’%(m/cnt))
样例:10 100
50 60 70 80 90 90 110 120 130 140
样例输出:
5 6 7
33.3
这里我想过把列表f排序后让f[i]==f[0]的方法,相当于比较大小嘛,然后输出
但是有个问题,就是虽然输出也是三个数,33.3,但是他输出的是经过排序后的列表中i的值
也就是1 2 3.和样例输出不一样,(方法其实也是可以的)
我当时做作业时不会写,我写了一个if abs(m-w[i])>abs(m-w[i+1]):然后放到新列表里排序,导致总是下表超界,因为到最后一个数的时候i+1是不存在的。所以要设置一个比较的标准,而且根据题意还不能乱掉原数字顺序,所以就采取了min[f]这个值,并且放到字符串里,直接输出。