Python(第十四周)

  • Post author:
  • Post category:python




1. 黑洞数 (10 分)

本题要求实现一个函数,判断某整数是否是黑洞数,如果是,返回True,否则返回False。黑洞数指的是,若某整数各个位上的数字组成的最大数减去各个位上数字组成的最小数等于该数本身,则称该数为黑洞数。比如495=954-459。

函数接口定义:

def isHd(n)

其中参数n是任意整数。

裁判测试程序样例:

/* 请在这里填写答案 */
n = int(input())
if isHd(n):
    print("yes")
else:
    print("no")

输入样例:

495

结尾无空行

输出样例:

yes

结尾无空行

输入样例:

1563

结尾无空行

输出样例:

no

结尾无空行

def isHd(n):
    n = list(map(str, str(n)))
    n1 = sorted(n, reverse=True)
    n2 = sorted(n, reverse=False)
    n = ''.join(n)
    n1 = ''.join(n1)
    n2 = ''.join(n2)

    if int(n1) - int(n2) == int(n):
        return 1
    else:
        return 0



2.成绩绩点计算 (10 分)

假设某大学的成绩绩点计算规则为:90分(含)以上计4.5分,80分(含)-90分(不含)计3分,70分(含)-80分(不含)计1.5分,60分(含)-70分(不含)计1分,60分以下不计分。输入某位同学的各门课成绩,请编写一个函数,打印该同学的平均绩点(保留2位小数)。

函数接口定义:

函数接口描述:
GPA(参数...)

裁判测试程序样例:

lst=list(map(eval,input().split()))
GPA(*lst)

输入样例1:

在这里给出一组输入。例如:

90 95 87

结尾无空行

输出样例1:

在这里给出相应的输出。例如:

4.00

结尾无空行

输入样例2:

在这里给出一组输入。例如:

60 73 88 59

结尾无空行

输出样例2:

在这里给出相应的输出。例如:

1.38

结尾无空行

def GPA(*l):
    sum = 0
    for i in l:
        if i >= 90:
            sum += 4.5
        elif 80 <= i < 90:
            sum += 3
        elif 70 <= i < 80:
            sum += 1.5
        elif 60 <= i < 70:
            sum += 1
        else:
            sum += 0
    print('%.2f' % (sum / len(l)))



3.求多项式的值 (30 分)

一元多项式可以用列表表示。如p(x)=1+3x+9x

4

,可以表示成列表[1,3,0,0,9]。输入列表表示的多项式和x的值,求多项式的值。

函数接口定义:

在这里描述函数接口。例如:
value(lst,x)

lst表示多项式,x代表具体的值。

裁判测试程序样例:

/* 请在这里填写答案 */

lst=eval(input())
y=float(input())
print("{:.1f}".format(polyvalue(lst,y)))

输入样例:

在这里给出一组输入。例如:

[1,3,0,0,9]

1

结尾无空行

输出样例:

在这里给出相应的输出。例如:

13.0

结尾无空行

def polyvalue(lst, x):
    sum = 0
    for i, j in enumerate(lst):
        sum += j * x ** i
    return sum



4.合并两个列表并去重 (6 分)

输入两个列表alist和blist,要求列表中的每个元素都为正整数且不超过10; 合并alist和blist,并将重复的元素去掉后输出一个新的列表clist。 可以使用以下实现列表alist的输入: alist=list(map(int,input().split())) 同时为保证输出结果一致,请将集合内元素排序之后再输出。 如对于列表alist,可输出sorted(alist)。

输入格式: 共两行,每一行都用来输入列表中的元素值,以空格隔开(可能不至一个空格 )。

输出格式: 共一行,以列表形式打印输出。

输入样例:

在这里给出一组输入。例如:

1 2 3

4 3 2

结尾无空行

输出样例:

在这里给出相应的输出。例如:

[1, 2, 3, 4]

结尾无空行

alist = list(map(int, input().split()))
blist = list(map(int, input().split()))
clist = set(alist + blist)
print(sorted(clist))



5.字符串合成 (10 分)

用户输入一个字符串,将下标为偶数的字符串提出来合并成一个新的字符串A,再将下标为奇数的字符串提出来合并成一个新的字符串B,再将字符串A和B连接起来输出。

输入格式:

输入一行字符串,如:abcdefg

输出格式:

将下标为偶数的字符串提出来合并成一个新的字符串A,再将下标为奇数的字符串提出来合并成一个新的字符串B,再将字符串A和B连接起来输出。如: aceg bdf acegbdf

输入样例1:

在这里给出一组输入。例如:

abcdefg

结尾无空行

输出样例1:

在这里给出相应的输出。例如:

aceg

bdf

acegbdf

结尾无空行

输入样例2:

在这里给出一组输入。例如:

白日依山尽

结尾无空行

输出样例2:

在这里给出相应的输出。例如:

白依尽

日山

白依尽日山

结尾无空行

s = input()
a, b = '', ''
for i in range(len(s)):
    if i % 2 == 0:
        a += s[i]
    else:
        b += s[i]
c = a + b
print(a)
print(b)
print(c)



6.查找数字字符串并求和 (8 分)

从键盘输入任意字符串,查找字符串中的所有数字字符串。若无数字字符串,则输出“No digits”,若有数字子串,则找到所有数字子串并求它们的和。 注意:数字可能有实数的子串。

输入格式:

输入任意字符串。

输出格式:

若无数字字符串,则输出“No digits”,若有数字子串,则找到所有数字子串并求它们的和。

输入样例:

在这里给出一组输入。例如:

34euitye87.89df37.903jdhf374

输出样例:

在这里给出相应的输出。例如:

533.793

n = input() + 'a'
x = ''
l = []
for i in n:
    if i.isdigit():
        x += i
    elif i == '.':
        if x == '':
            continue
        elif x.isdigit():
            x += i
        else:
            x = ''
    else:
        if x != '' and x[0].isdigit():
            l.append(eval(x))
            x = ''
if len(l) != 0:
    print("%s" % sum(l))
else:
    print("No digits")



7.加密字符串 (15 分)

实现一个加密函数easyCrypto(),带两个输入参数:一个需加密的字符串,一个3位数字字符串的秘钥,输出密文。

加密规则:对于出现的第一个字母,按第一个数字后的字母变换,出现的第二个字母按第二个数字,出现的第三个字母按第三个数字,出现的第四个字母按第一个数字,以此类推,字母之外的字符保持不变。

输入格式:

第一行输入要加密的字符串 第二行输入3位数字字符串

输出格式:

输出加密后的字符串

输入样例1:

在这里给出一组输入。例如:

abcde

123

结尾无空行

输出样例1:

在这里给出相应的输出。例如:

bdfeg

结尾无空行

输入样例2:

在这里给出一组输入。例如:

aA,zZ

111

结尾无空行

输出样例2:

在这里给出相应的输出。例如:

bB,aA

def easyCrypto(s, p):
    t = 0
    for i in s:
        if i.isalpha():
            t += 1
            f = t % 3 - 1
            if ord(i) <= 90:
                if ord(i) + int(p[f]) > 90:
                    print(chr(ord(i) + int(p[f]) - 26), end="")
                else:
                    print(chr(ord(i) + int(p[f])), end="")
            else:
                if ord(i) + int(p[f]) > 122:
                    print(chr(ord(i) + int(p[f]) - 26), end="")
                else:
                    print(chr(ord(i) + int(p[f])), end="")
        else:
            print(i, end="")


lst = input()
passwd = input()
easyCrypto(lst, passwd)



8.旋转方阵 (10 分)

对于一个奇数n阶方阵,请给出经过顺时针方向m次旋转后的结果。

输入格式:

测试数据有多组,处理到文件尾。每组测试的第一行输入2个整数n,m(1<n<20,1≤m≤100),接下来输入n行数据,每行n个整数。

输出格式:

对于每组测试,输出奇数阶方阵经过m次顺时针方向旋转后的结果。每行中各数据之间留一个空格。

输入样例:

3 2

4 9 2

3 5 7

8 1 6

3 1

4 9 2

3 5 7

8 1 6

3 7

4 9 2

3 5 7

8 1 6

3 8

4 9 2

3 5 7

8 1 6

输出样例:

6 1 8

7 5 3

2 9 4

8 3 4

1 5 9

6 7 2

2 7 6

9 5 1

4 3 8

4 9 2

3 5 7

8 1 6

while True:
    try:
        n, m = map(int, input().split())
        l = list()
        for i in range(n):
            l.append(list(map(int, input().split())))
        for x in range(m):
            data = []
            for i in range(n):
                t = []
                for j in range(n):
                    t.insert(0, l[j][i])
                data.append(list(t))
                t.clear()
            l = data
        for i in range(n):
            for j in range(n-1):
                print(l[i][j], end=" ")
            print(l[i][n-1])
    except:
        break



9. 简版田忌赛马 (10 分)

这是一个简版田忌赛马问题,具体如下: 田忌与齐王赛马,双方各有n匹马参赛,每场比赛赌注为200两黄金,现已知齐王与田忌的每匹马的速度,并且齐王肯定是按马的速度从快到慢出场,请写一个程序帮助田忌计算他最多赢多少两黄金(若输,则用负数表示)。 简单起见,保证2n匹马的速度均不相同。

输入格式:

首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。 每组测试数据输入3行,第一行是n(1≤n≤100) ,表示双方参赛马的数量,第2行n个正整数,表示田忌的马的速度,第3行n个正整数,表示齐王的马的速度。

输出格式:

对于每组测试数据,输出一行,包含一个整数,表示田忌最多赢多少两黄金。

输入样例:

3

3

92 83 71

95 87 74

2

20 25

21 12

10

1 2 3 24 5 6 7 8 9 12

11 13 15 19 22 34 14 21 44 99

输出样例:

200

400

-1200

t = eval(input())
for i in range(t):
    n = eval(input())
    tj = list(map(int, input().split()))
    qw = list(map(int, input().split()))
    sum = 0
    for j in range(n):
        if max(tj) > max(qw):
            sum += 200
            tj.remove(max(tj))
            qw.remove(max(qw))
        elif max(tj) < max(qw):
            sum -= 200
            tj.remove(min(tj))
            qw.remove(max(qw))
    print(sum)



10.进步排行榜 (10 分)

假设每个学生信息包括“用户名”、“进步总数”和“解题总数”。解题进步排行榜中,按“进步总数”及“解题总数”生成排行榜。要求先输入n个学生的信息;然后按“进步总数”降序排列;若“进步总数”相同,则按“解题总数”降序排列;若“进步总数”和“解题总数”都相同,则排名相同,但输出信息时按“用户名”升序排列。

输入格式:

首先输入一个整数T,表示测试数据的组数,然后是T组测试数据。每组测试数据先输入一个正整数n(1 < n < 50),表示学生总数。然后输入n行,每行包括一个不含空格的字符串s(不超过8位)和2个正整数d和t,分别表示用户名、进步总数和解题总数。

输出格式:

对于每组测试,输出最终排名。每行一个学生的信息,分别是排名、用户名、进步总数和解题总数。每行的各个数据之间留一个空格。注意,进步总数和解题总数都相同的学生其排名也相同。

输入样例:

2

6

usx15131 21 124

usx15101 27 191

usx15113 31 124

usx15136 18 199

usx15117 27 251

usx15118 21 124

10

usx15131 21 124

usx15101 27 191

usx15107 24 154

usx15113 31 124

usx15117 25 251

usx15118 21 124

usx15119 22 117

usx15121 43 214

usx15128 21 124

usx15136 28 199

输出样例:

1 usx15113 31 124

2 usx15117 27 251

3 usx15101 27 191

4 usx15118 21 124

4 usx15131 21 124

6 usx15136 18 199

1 usx15121 43 214

2 usx15113 31 124

3 usx15136 28 199

4 usx15101 27 191

5 usx15117 25 251

6 usx15107 24 154

7 usx15119 22 117

8 usx15118 21 124

8 usx15128 21 124

8 usx15131 21 124

t = eval(input())
for i in range(t):
    n = eval(input())
    l = list()
    for i in range(n):
        s, d, t = input().split()
        l.append([str(s), int(d), int(t)])
    l = sorted(l, key=lambda x: (-x[1], -x[2], x[0]), reverse=False)
    flag1, flag2 = 0, 0
    ls1, ls2 = 0, 0
    for x in range(n):
        flag2 += 1
        if ls1 == l[x][1] and ls2 == l[x][2]:
            flag1 = flag1
        else:
            ls1, ls2 = l[x][1], l[x][2]
            flag1 = flag2
        print(flag1, ' '.join(str(i) for i in l[x]))



版权声明:本文为Anemia_原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。