Python真题练习:1004-成绩排名、1009-说反话、1017-A除以B、1018-锤子剪刀布

1004——成绩排名

读入n (>0)名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。

输入格式:

每个测试输入包含 1 个测试用例,格式为

1 行:正整数 n

2 行:第 1 个学生的姓名 学号 成绩

3 行:第 2 个学生的姓名 学号 成绩

…………

第 n+1 行:第 n 个学生的姓名 学号 成绩

其中姓名学号均为不超过 10 个字符的字符串,成绩为 0 到 100 之间的一个整数,这里保证在一组测试用例中没有两个学生的成绩是相同的。

输出格式:

对每个测试用例输出 2 行,第 1 行是成绩最高学生的姓名和学号,第 2 行是成绩最低学生的姓名和学号,字符串间有 1 空格。

输入样例:

3
Joe Math990112 89
Mike CS991301 100
Mary EE990830 95

输出样例:

Mike CS991301
Joe Math990112

代码实现:

def GradeRanking(n):
    name=[]
    num=[]
    grade=[]
    for i in range(int(n)):
        a=input().split()
        name.append(a[0])
        num.append(a[1])
        grade.append(int(a[2]))
    gmax=grade[0]
    gmin=grade[0]
    g1,g2=0,0
    for i in range(len(grade)):
        if grade[i]>gmax:
            gmax=grade[i]
            g1=i
        if grade[i]<gmin:
            gmin=grade[i]
            g2=i
    print(name[g1],num[g1])
    print(name[g2],num[g2])

n=input()
GradeRanking(n)

运行结果:

 

 

1009——说反话

给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。

输入格式:

测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。

输出格式:

每个测试用例的输出占一行,输出倒序后的句子。

输入样例:

Hello World Here I Come

输出样例:

Come I Here World Hello

代码实现:

#第一种方法    
s=input().split()
s1=s[::-1]
s2=' '.join(s1)
print(s2)    
#第二种方法
s=input().split()
s.reverse()
s1=' '.join(s)
print(s1)

运行结果:

 

 

1017——A除以B

本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数。你需要输出商数Q和余数R,使得 A=BxQ+R 成立。

输入格式:

输入在一行中依次给出A和B,中间以1空格分隔。

输出格式:

在一行中依次输出Q和R,中间以1空格分隔。

输入样例:

123456789050987654321 7

输出样例:

17636684150141093474 3

代码实现:

def AdiviB(s):
    R=int(s[0])%int(s[1])
    Q=(int(s[0])-R)//int(s[1])
    print(Q,R)

s=input().split()
if len(s)==2:
    AdiviB(s)

运行结果:

 

 

1018——锤子剪刀布

大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:

FigCJB.jpg

现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。

输入格式:

输入第1行给出正整数N (<=10^5),即双方交锋的次数。随后N行,每行给出一次交锋的信息,即甲、乙双方同时给出的的手势。C代表“锤子”、J代表“剪刀”、B代表“布”,第1个字母代表甲方,第2个代表乙方,中间有1个空格。

输出格式:

输出第 1、2 行分别给出甲、乙的胜、平、负次数,数字间以 1 个空格分隔。第 3 行给出两个字母,分别代表甲、乙获胜次数最多的手势,中间有 1 个空格。如果解不唯一,则输出按字母序最小的解。

输入样例:

10
C J
J B
C B
B B
B C
C C
C B
J B
B C
J J

输出样例:

5 3 2
2 3 5
B B

代码实现:

def CJB(n):
    J1=0#甲赢的第一种情况,即甲C乙J
    J2=0#甲赢的第二种情况,即甲J乙B
    J3=0#甲赢的第三种情况,即甲B乙C
    Ping=0#平局计数
    Y1=0#乙赢的第二种情况,即甲J乙C
    Y2=0#乙赢的第三种情况,即甲B乙J
    Y3=0#乙赢的第一种情况,即甲C乙B
    for k in range(int(n)):#输赢判断、计数
        i=input().split()
        if i[0]=='C' and i[1]=='J':
            J1+=1
        elif i[0]=='J' and i[1]=='B':
            J2+=1
        elif i[0]=='B' and i[1]=='C':
            J3+=1
        elif i[0]=='J' and i[1]=='C':
            Y1+=1
        elif i[0]=='B' and i[1]=='J':
            Y2+=1
        elif i[0]=='C' and i[1]=='B':
            Y3+=1
        else:
            Ping+=1
    #甲、乙赢、平、输次数
    print(J1+J2+J3,Ping,int(n)-(J1+J2+J3+Ping))
    print(Y1+Y2+Y3,Ping,int(n)-(Y1+Y2+Y3+Ping))
    #甲、乙获胜次数最多的手势
    if J1>=J2 and J1>J3:
        a='C'
    elif J2>J1 and J2>J3:
        a='J'
    elif J3>=J1 and J3>=J2:
        a='B'
    if Y1>=Y2 and Y1>Y3:
        b='C'
    elif Y2>Y1 and Y2>Y3:
        b='J'
    elif Y3>=Y1 and Y3>=Y2:
        b='B'
    print(a,b)

n=input()
CJB(n)

运行结果:

 

posted @ 2020-04-09 04:47  圈er  阅读(605)  评论(0编辑  收藏  举报