科大讯飞2019暑期实习笔试题(改成绩,杀手)

题:
华老师的n个学生参加了一次模拟测验,考出来的分数很糟糕,但是华老师可以将成绩修改为[0,100]中的任意值,所以他想知道,如果要使所有人的成绩的平均分不少于X分,至少要改动多少个人的分数?
输入:
第一行一个数T,共T组数据(T≤10)
接下来对于每组数据:
第一行两个整数n和X。(1≤n≤1000, 0≤X≤100)
第二行n个整数,第i个数Ai表示第i个学生的成绩。(0≤Ai≤100)
输出:
共T行,每行一个整数,代表最少的人数。
在这里插入图片描述
思路:
使用while循环,avg<x就执行循环,否则跳出循环。为了次数少,找出里面最小的数,将它改成最高分就行,每次操作次数增加1。
代码如下:

import numpy as np
n = int(input())
z = 0
for i in range(n):
    list1 = list(map(int, input().split()))
    list2 = list(map(int, input().split()))
    while np.mean(list2) < list1[1]:
        print(np.mean(list2))
        a = min(list2)
        b = list2.index(a)
        list2[b] = 100
        z = z + 1
    print(z)
    z = 0

题2:
有n个杀手排成一行,每个杀手都有一个不同的编号(编号为1-n),在每个夜晚,杀手都会行动,如果某个杀手编号大于他右边的杀手的编号,他就会杀死他右边的杀手,杀手的行动是瞬间的,因此一个人可能某一个演完既杀死了别人,又被别人杀死了,例如3,2,1这个顺序,在第一个夜晚2会杀死1,同时3会杀死2.显然易见,一段时间之后,就不会有人杀死或者被杀了,平安夜也就来了,请问在平安夜之前有多少个夜晚?
输入:
第一行是一个整数n(1<=n<=100000),表示杀手的数量。 接下来一行有n个数,是一个1-n的全排列。
输出:
输出包含一个整数,表示平安夜之前经历个多少了夜晚。
在这里插入图片描述
思想:
[4,3,2,1]变成[[4,3],[3,2],[2,1]]。遍历每个子集,只有左边>右边,记下右边在原list里的位置。倒序需要删除的位置(从后往前删),在原list里删除这些位置的数,并计数1次。只要需要删除不为空就一直循环,循环到需要删除的为空结束。输出是计数次数减1,因为最后一次操作实际未输出(需要删除的为空)。
代码:

n = int(input())
list1 = list(map(int,input().split()))
num = 1
list2 = []
list3 = []
z = 0
while num > 0:
    for i in range(len(list1)-1):
        a = [list1[i],list1[i+1]]
        list2.append(a)
    for i2 in range(len(list1)-1):
        if list2[i2][0] > list2[i2][1]:
            list3.append(i2+1)
        else:
            pass
    list3 = list(set(list3))
    num = len(list3)
    list3.sort(reverse=True)
    for i3 in list3:
        list1.pop(i3)
    z = z + 1
    list2 = []
    list3 = []
print(z-1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值