python编程练习(三)

一:研究生考试

考研有4门科目,分别是政治(满分100分),英语(满分100分),数学(满分150分)和专业课(满分150分)。某校计算机专业今年录取研究生的要求是:政治、英语每门课成绩不低于60分,数学和专业课不低于90分,总成绩不低于310分。并且规定:在满足单科以及总成绩最低要求的基础上,350分以上(含350分)为公费(Gongfei),310分~349分为自费(Zifei)。
请编程判断考生的录取情况。

N = int(raw_input())
for i in range(N):
    a,b,c,d = map(int,raw_input().split())
    sums = a+b+c+d
    if a>=60 and b>=60 and c>=90 and d>=90 and sums>=310:
        if sums<350:
            print 'Zifei'
        else:
            print 'Gongfei'
    else:
        print 'Fail'

二:行编辑器

第一行是一个整数T,代表有T组数据。每组数据的开始时一个字符串,字符串长度小于100,每个字符一定是(。

"""
whli##ilr#e(s#*s)       -->while(*s)
outcha@putchar(*s=#++)  -->putchar(*s++)
returnWA##A!!##C        -->returnAC
"""
N = int(raw_input())
for i in range(N):
    a = str(raw_input())
    res=''
    for j in a:
        if j=='#':
            res=res[:-1]
        elif j=='@':
            res=''
        else:
            res =res+j
    print res

三:接金币

在游戏里,金币都掉落在0-10这11个位置。开始时帽子刚开始在5这个位置,因此在第一秒,帽子只能接到4,5,6这三个位置中其中一个位置上的金币。问小赛在游戏中最多可能接到多少个金币?

n=map(int,raw_input().split())
b ={}
for i in range(n[0]):
    x,T=n[1+2*i],n[2+2*i]
    if T not in b.keys():
        b[T]=[]
    b[T].append(x)
# print b
arr=[[0 for _ in range(11)] for _ in range(n[0])]
for j in range(n[0]):
    for k in range(max(0,5-j-1),min(10,5+j+2)):
        if j+1 in b.keys() and k in b[j+1]:   
            if j==0:
                arr[j][k]=1
            else:
                arr[j][k]=1+max(arr[j-1][k-1],arr[j-1][k],arr[j-1][k+1])
        else:
            if k==0:
                arr[j][k] = max(arr[j - 1][k], arr[j - 1][k + 1])
            elif k==10:
                arr[j][k]= max(arr[j-1][k-1],arr[j-1][k])
            else:
                arr[j][k] = max(arr[j - 1][k - 1], arr[j - 1][k], arr[j - 1][k + 1])
# print arr
print max(arr[n[0]-1])
"""
输入:5 8 3 9 5 10 3 6 2 5 1
{1: [5], 2: [6], 3: [8, 10], 5: [9]}
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], 
[0, 0, 0, 0, 1, 1, 2, 0, 0, 0, 0], 
[0, 0, 0, 1, 1, 2, 2, 2, 1, 0, 0], 
[0, 0, 1, 1, 2, 2, 2, 2, 2, 1, 0], 
[0, 1, 1, 2, 2, 2, 2, 2, 2, 3, 1]]
3
"""

四:下起楼来我最快

第一行两个整数n,m,其中n【5】表示小赛家在的楼层,m【10】表示当前电梯停在的楼层,
第二行四个整数,t1,t2,t3,t4【1 5 5 4】其中t1表示电梯每经过一层楼的时间,t2表示开门时间,t3表示关门时间,t4表示小赛每下一层楼的时间。
分析
1,走下去t4xn
2,原地等电梯,abs(m-n)x1+5+5+nx1+5

n,m = map(int,raw_input().split())
t1,t2,t3,t4=map(int,raw_input().split())
res1 = (n-1)*t4
res2 = abs(m-n)*t1+t2+t3+(n-1)*t1+t2
print(min(res1,res2))

五:回文串

给定一个字符串,问是否能够通过添加一个字母将其变成“回文串”。 “回文串”是指正着和反着读都一样的字符串。如:”aa”,”bob”,”testset”是回文串,”alice”,”time”都不是回文串。
分析
去掉两边,找出中间的字符串,然后反转

def dels(a,b):
    if a == b:
        return True
    elif a + a[0] == a[0] + b:      # 添加前面一个字符或者添加后面一个字符
        return True
    elif b[0]+a==b+b[0]:            # 这种fft的情况没想到
        return True
    return False
a = str(raw_input())
i = 0
l = len(a)
while i <(l/2+1) and a[i]==a[l-1-i]:
    i+=1
a1 = a[i:l-i]
b1 = a1[::-1]
if dels(a1,b1):
    print('Yes')
else:
    print('No')

六:装载乘客

参加活动的总共有n个班级,第i班总共有ai名学生,每辆车最大乘车人数为m,满足m>a1, a2, …, an。乘车时必须按照班级排列顺序进行乘车,不能调整班级顺序进行拼车。为保证同一个班级的学生在同一辆车上,如果当前汽车装完上一个班级后,下一个班级所有同学无法装下,那么当前车开走使用下一辆车。问最少需要多少辆车才能把所有学生运完?
分析
4 3 # n表示班级数目,m表示汽车最大装载人数。
2 3 2 1

n,m = map(int,raw_input().split())
nlist = map(int,raw_input().split())
res=0
while len(nlist):
    i=0
    while iand sum(nlist[:i+1])<=m:
        i+=1
    nlist=nlist[i:]
    res+=1
print res

你可能感兴趣的:(python_code)