【PTA】温故知新模拟题

目录

L1-2 日期格式化

输入格式:

输出格式:

输入样例:

输出样例:

代码:

L1-4 心理阴影面积

输入格式:

输出格式:

输入样例:

输出样例:

代码:

7-3 猫是液体

输入格式:

输出格式:

输入样例:

输出样例:

代码:

7-7 到底是不是太胖了

输入格式:

输出格式:

输入样例:

输出样例:

代码: 

7-4 判断素数

输入格式:

输出格式:

输入样例:

输出样例:

代码: 

L1-7 谁是赢家

输入格式:

输出格式:

输入样例:

输出样例:

代码: 

7-7 吃鱼还是吃肉

输入格式:

输出格式:

输入样例:

输出样例:

代码:

7-8 调和平均

输入格式:

输出格式:

输入样例:

输出样例:

代码: 

L1-8 刮刮彩票

输入格式:

输出格式:

输入样例:

输出样例:

 代码:

L2-2 小字辈

输入格式:

输出格式:

输入样例:

输出样例:

代码: 


L1-2 日期格式化

世界上不同国家有不同的写日期的习惯。比如美国人习惯写成“月-日-年”,而中国人习惯写成“年-月-日”。下面请你写个程序,自动把读入的美国格式的日期改写成中国习惯的日期。

输入格式:

输入在一行中按照“mm-dd-yyyy”的格式给出月、日、年。题目保证给出的日期是1900年元旦至今合法的日期。

输出格式:

在一行中按照“yyyy-mm-dd”的格式给出年、月、日。

输入样例:

03-15-2017

输出样例:

2017-03-15

代码:

n = list(input().split('-'))
print(n[-1] + '-' + n[0] + '-' + n[1])

L1-4 心理阴影面积

【PTA】温故知新模拟题_第1张图片

这是一幅心理阴影面积图。我们都以为自己可以匀速前进(图中蓝色直线),而拖延症晚期的我们往往执行的是最后时刻的疯狂赶工(图中的红色折线)。由红、蓝线围出的面积,就是我们在做作业时的心理阴影面积。

现给出红色拐点的坐标 (x,y),要求你算出这个心理阴影面积。

输入格式:

输入在一行中给出 2 个不超过 100 的正整数 x 和 y,并且保证有 x>y。这里假设横、纵坐标的最大值(即截止日和最终完成度)都是 100。

输出格式:

在一行中输出心理阴影面积。

友情提醒:三角形的面积 = 底边长 x 高 / 2;矩形面积 = 底边长 x 高。嫑想得太复杂,这是一道 5 分考减法的题……

输入样例:

90 10

输出样例:

4000

代码:

x, y = list(map(int, input().split()))
print(int(100*100/2 - x*y/2 - (100-x)*y - (100-x)*(100-y)/2))

 

7-3 猫是液体

测量一个人的体积是很难的,但猫就不一样了。因为猫是液体,所以可以很容易地通过测量一个长方体容器的容积来得到容器里猫的体积。本题就请你完成这个计算。

输入格式:

输入在第一行中给出 3 个不超过 100 的正整数,分别对应容器的长、宽、高。

输出格式:

在一行中输出猫的体积。

输入样例:

23 15 20

输出样例:

6900

代码:

x, y, z = list(map(int, input().split()))
print(x*y*z)

 

7-7 到底是不是太胖了

据说一个人的标准体重应该是其身高(单位:厘米)减去100、再乘以0.9所得到的公斤数。真实体重与标准体重误差在10%以内都是完美身材(即 | 真实体重 − 标准体重 | < 标准体重×10%)。已知市斤是公斤的两倍。现给定一群人的身高和实际体重,请你告诉他们是否太胖或太瘦了。

输入格式:

输入第一行给出一个正整数N(≤ 20)。随后N行,每行给出两个整数,分别是一个人的身高H(120 < H < 200;单位:厘米)和真实体重W(50 < W ≤ 300;单位:市斤),其间以空格分隔。

输出格式:

为每个人输出一行结论:如果是完美身材,输出You are wan mei!;如果太胖了,输出You are tai pang le!;否则输出You are tai shou le!

输入样例:

3
169 136
150 81
178 155

输出样例:

You are wan mei!
You are tai shou le!
You are tai pang le!

代码: 

n = int(input())
for _ in range(n):
    h, w = map(int, input().split())
    total = (h - 100) * 0.9 * 2
    if abs(total - w) < total * 0.1:
        print('You are wan mei!')
    elif w < total:
        print('You are tai shou le!')
    else:
        print('You are tai pang le!')

7-4 判断素数

本题的目标很简单,就是判断一个给定的正整数是否素数。

输入格式:

输入在第一行给出一个正整数N(≤ 10),随后N行,每行给出一个小于231的需要判断的正整数。

输出格式:

对每个需要判断的正整数,如果它是素数,则在一行中输出Yes,否则输出No

输入样例:

2
11
111

输出样例:

Yes
No

代码: 

import math

n = int(input())
for _ in range(n):
    m = int(input())
    if m < 2 or (m > 2 and m % 2 == 0):
        print('No')
    else:
        flag = True
        for i in range(2, int(math.sqrt(m)) + 1):
            if m % i == 0:
                flag = False
                break
        if flag:
            print('Yes')
        else:
             print('No')

 

L1-7 谁是赢家

某电视台的娱乐节目有个表演评审环节,每次安排两位艺人表演,他们的胜负由观众投票和 3 名评委投票两部分共同决定。规则为:如果一位艺人的观众票数高,且得到至少 1 名评委的认可,该艺人就胜出;或艺人的观众票数低,但得到全部评委的认可,也可以胜出。节目保证投票的观众人数为奇数,所以不存在平票的情况。本题就请你用程序判断谁是赢家。

输入格式:

输入第一行给出 2 个不超过 1000 的正整数 Pa 和 Pb,分别是艺人 a 和艺人 b 得到的观众票数。题目保证这两个数字不相等。随后第二行给出 3 名评委的投票结果。数字 0 代表投票给 a,数字 1 代表投票给 b,其间以一个空格分隔。

输出格式:

按以下格式输出赢家:

The winner is x: P1 + P2

其中 x 是代表赢家的字母,P1 是赢家得到的观众票数,P2 是赢家得到的评委票数。

输入样例:

327 129
1 0 1

输出样例:

The winner is a: 327 + 1

代码: 

Pa, Pb = map(int, input().split())
votes = list(map(int, input().split()))

aVotes = votes.count(0)
bVotes = votes.count(1)

if Pa > Pb and aVotes >= 1:
    winner = 'a'
    winnerVotes = Pa
elif Pb > Pa and bVotes >= 1:
    winner = 'b'
    winnerVotes = Pb
elif aVotes == 3:
    winner = 'a'
    winnerVotes = Pa
elif bVotes == 3:
    winner = 'b'
    winnerVotes = Pb
if winner == 'a':
    print(f"The winner is {winner}: {winnerVotes} + {aVotes}")
else:
    print(f"The winner is {winner}: {winnerVotes} + {bVotes}")

 

7-7 吃鱼还是吃肉

国家给出了 8 岁男宝宝的标准身高为 130 厘米、标准体重为 27 公斤;8 岁女宝宝的标准身高为 129 厘米、标准体重为 25 公斤。

现在你要根据小宝宝的身高体重,给出补充营养的建议。

输入格式:

输入在第一行给出一个不超过 10 的正整数 N,随后 N 行,每行给出一位宝宝的身体数据:

性别 身高 体重

其中性别是 1 表示男生,0 表示女生。身高体重都是不超过 200 的正整数。

输出格式:

对于每一位宝宝,在一行中给出你的建议:

  • 如果太矮了,输出:duo chi yu!(多吃鱼);
  • 如果太瘦了,输出:duo chi rou!(多吃肉);
  • 如果正标准,输出:wan mei!(完美);
  • 如果太高了,输出:ni li hai!(你厉害);
  • 如果太胖了,输出:shao chi rou!(少吃肉)。

先评价身高,再评价体重。两句话之间要有 1 个空格。

输入样例:

4
0 130 23
1 129 27
1 130 30
0 128 27

输出样例:

ni li hai! duo chi rou!
duo chi yu! wan mei!
wan mei! shao chi rou!
duo chi yu! shao chi rou!

代码:

n = int(input())

for _ in range(n):
    gender, height, weight = map(int, input().split())
    if gender == 1:
        if height < 130:
            height_advice = "duo chi yu!"
        elif height > 130:
            height_advice = "ni li hai!"
        else:
            height_advice = "wan mei!"

        if weight < 27:
            weight_advice = "duo chi rou!"
        elif weight > 27:
            weight_advice = "shao chi rou!"
        else:
            weight_advice = "wan mei!"

    else:
        if height < 129:
            height_advice = 'duo chi yu!'
        elif height > 129:
            height_advice = 'ni li hai!'
        else:
            height_advice = 'wan mei!'

        if weight < 25:
            weight_advice = "duo chi rou!"
        elif weight > 25:
            weight_advice = "shao chi rou!"
        else:
            weight_advice = "wan mei!"

    print(f"{height_advice} {weight_advice}")

7-8 调和平均

N 个正数的算数平均是这些数的和除以 N,它们的调和平均是它们倒数的算数平均的倒数。本题就请你计算给定的一系列正数的调和平均值。

输入格式:

每个输入包含 1 个测试用例。每个测试用例第 1 行给出正整数 N (≤1000);第 2 行给出 N 个正数,都在区间 [0.1,100] 内。

输出格式:

在一行中输出给定数列的调和平均值,输出小数点后2位。

输入样例:

8
10 15 12.7 0.3 4 13 1 15.6

输出样例:

1.61

代码: 

N = int(input())
numbers = list(map(float, input().split()))

t = sum(1 / num for num in numbers) / N
r = 1 / t

print('%.2f' % r)

 

L1-8 刮刮彩票

“刮刮彩票”是一款网络游戏里面的一个小游戏。如图所示:

【PTA】温故知新模拟题_第2张图片

每次游戏玩家会拿到一张彩票,上面会有 9 个数字,分别为数字 1 到数字 9,数字各不重复,并以 3×3 的“九宫格”形式排布在彩票上。

在游戏开始时能看见一个位置上的数字,其他位置上的数字均不可见。你可以选择三个位置的数字刮开,这样玩家就能看见四个位置上的数字了。最后玩家再从 3 横、3 竖、2 斜共 8 个方向中挑选一个方向,方向上三个数字的和可根据下列表格进行兑奖,获得对应数额的金币。

数字合计 获得金币 数字合计 获得金币
6 10,000 16 72
7 36 17 180
8 720 18 119
9 360 19 36
10 80 20 306
11 252 21 1,080
12 108 22 144
13 72 23 1,800
14 54 24 3,600
15 180

现在请你写出一个模拟程序,模拟玩家的游戏过程。

输入格式:

输入第一部分给出一张合法的彩票,即用 3 行 3 列给出 0 至 9 的数字。0 表示的是这个位置上的数字初始时就能看见了,而不是彩票上的数字为 0。

第二部给出玩家刮开的三个位置,分为三行,每行按格式 x y 给出玩家刮开的位置的行号和列号(题目中定义左上角的位置为第 1 行、第 1 列。)。数据保证玩家不会重复刮开已刮开的数字。

最后一部分给出玩家选择的方向,即一个整数: 1 至 3 表示选择横向的第一行、第二行、第三行,4 至 6 表示纵向的第一列、第二列、第三列,7、8分别表示左上到右下的主对角线和右上到左下的副对角线。

输出格式:

对于每一个刮开的操作,在一行中输出玩家能看到的数字。最后对于选择的方向,在一行中输出玩家获得的金币数量。

输入样例:

1 2 3
4 5 6
7 8 0
1 1
2 2
2 3
7

输出样例:

1
5
6
180

 代码:

dict = {'6': 10000, '7': 36, '8': 720, '9': 360, '10': 80, '11': 252, 
       '12': 108, '13': 72, '14': 54, '15': 180, '16': 72, '17': 180, 
       '18': 119, '19': 36, '20': 306, '21': 1080, '22': 144, '23':1800, '24': 3600}

l = []
numbers_left = list(range(1, 10))

for _ in range(3):
    data = list(map(int, input().split()))
    for i in data:
        if i in numbers_left:
            numbers_left.remove(i)
    l.append(data)

for i in range(3):
    for j in range(3):
        if l[i][j] == 0:
            l[i][j] = numbers_left.pop()

x1, y1 = map(int, input().split())
x2, y2 = map(int, input().split())
x3, y3 = map(int, input().split())
direction = int(input())

print(f"{l[x1 - 1][y1 - 1]}\n{l[x2 - 1][y2 - 1]}\n{l[x3 - 1][y3 - 1]}")

count = 0
if direction == 1:
    count = sum(l[0])
elif direction == 2:
    count = sum(l[1])
elif direction == 3:
    count = sum(l[2])
elif direction == 4:
    count = sum(l[i][0] for i in range(3))
elif direction == 5:
    count = sum(l[i][1] for i in range(3))
elif direction == 6:
    count = sum(l[i][2] for i in range(3))
elif direction == 7:
    count = sum(l[i][i] for i in range(3))
else:
    count = sum(l[i][2 - i] for i in range(3))

print(dict[str(count)])

L2-2 小字辈

本题给定一个庞大家族的家谱,要请你给出最小一辈的名单。

输入格式:

输入在第一行给出家族人口总数 N(不超过 100 000 的正整数) —— 简单起见,我们把家族成员从 1 到 N 编号。随后第二行给出 N 个编号,其中第 i 个编号对应第 i 位成员的父/母。家谱中辈分最高的老祖宗对应的父/母编号为 -1。一行中的数字间以空格分隔。

输出格式:

首先输出最小的辈分(老祖宗的辈分为 1,以下逐级递增)。然后在第二行按递增顺序输出辈分最小的成员的编号。编号间以一个空格分隔,行首尾不得有多余空格。

输入样例:

9
2 6 5 5 -1 5 6 4 7

输出样例:

4
1 9

代码: 

n = int(input())
parents = list(map(int, input().split()))
bf = list(range(1, n + 1))

dict = {}
for i in range(n):
    if parents[i] in dict:
        dict[parents[i]].append(bf[i])
    else:
        dict[parents[i]] = [bf[i]]

beifen = 0
tbf = dict[-1]

while True:
    beifen += 1
    cbf = [x for i in tbf if i in dict for x in dict[i]]

    if not cbf:
        break
    tbf = cbf

print(beifen)
print(*tbf)

你可能感兴趣的:(python,PTA)