PTA练习集部分答案(持续更新ing

2024.3.18

L1-002 打印沙漏

num, ch = input().split(' ')
# 字符的数量强制转换为整型
num = int(num)
# 沙漏任意一边的行数
row = 1
# 确定沙漏任意一边的行数
while (2 * row ** 2 - 1) <= num:
    row = row + 1

row = row - 1

long = 2 * row - 1

# 打印沙漏的中部和上部
for i in range(row, 0, -1):
    print((ch * (2 * i - 1)).rjust(long))
    long=long-1

long=long+1

# 打印沙漏的下部
for j in range(2, row + 1):
    long=long+1
    print((ch * (2 * j - 1)).rjust(long))
    
    
# 输出剩余的符号数
print(num - 2 * row ** 2 + 1)

L1-003 个位数统计

d = [0] * 10
cnt = 0
n = int(input())

while n > 0:
    cnt = n % 10
    d[cnt] += 1
    n = n // 10

for i in range(10):
    if d[i] == 0:
        continue
    else:
        print("%d:%d"%(i, d[i]))

2024.3.19

L1-005 考试座位号


if __name__ == '__main__':
    n = int(input())
    a = [[0] * 3 for i in range(n)]
    for i in range(n):
        a[i] = input().split()

    m = input()
    nm = input().split()

    for i in nm:
        for j in range(n):
            if i == a[j][1]:
                print("{} {}".format(a[j][0], a[j][2]))
            else:
                continue

L1-006 连续因子

感觉按思路来说没问题

①从2开始枚举因子

②找到最长的连续因子序列并记录到列表中,记录并更新最长连续因子序列长度

③迭代完成后,输出就好了

问题:

①错误不知道哪组数据会错(没考虑到连续因子相乘之后是否还是N的因子)

②数据大了会爆栈

# 开发人:Agu
# 开发时间: 2024/3/19  10:32

def check(n):
    num = []
    ans = []
    long = 0
    for i in range(2, n):
        if n % i == 0:
            num.append(i)
        else:
            if len(num) > long:
                long = len(num)
                ans = num.copy()
            num = []
    if len(num) > long:
        long = len(num)
        ans = num.copy()
    print(long)
    print(ans[0], end='')
    ans.pop(0)
    for i in ans:
        print('*{}'.format(i), end='')

if __name__ == '__main__':
    n = int(input())
    check(n)

L1-007 念数字

d = {
    '-': 'fu',
    '0': 'ling',
    '1': 'yi',
    '2': 'er',
    '3': 'san',
    '4': 'si',
    '5': 'wu',
    '6': 'liu',
    '7': 'qi',
    '8': 'ba',
    '9': 'jiu',
}
s = list(input())
for i in range(len(s) - 1):
    print(d[s[i]] + ' ', end='')
print(d[s[len(s) - 1]], end='')

L1-008 求整数段和

天梯赛的输出格式怎么这么严.......

if __name__ == '__main__':
    n, m = map(int, input().split())
    a = []
    num = 0
    cnt = 0

    for i in range(n, m + 1):
        a.append(i)
        num += i

    for i in range(n, m + 1):
        if cnt % 5 == 0 and cnt != 0:
            print()
        print('{: >5}'.format(i), end='')
        cnt += 1
        
    print("\nSum = {}".format(num))

2024.3.20

L1-009 N个数求和

# 开发人:Agu
# 开发时间: 2023/3/25  15:45

import math

suma = 0
numb = 1

n = int(input())
str1 = input().split()
for i in str1:
    a, b = map(int, i.split('/'))
    #print(a, b)
    suma *= b
    suma = suma + a * numb
    numb *= b
    m = math.gcd(suma, numb)
    suma = suma // m
    numb = numb // m

if suma and suma // numb == 0:
    print("{}/{}".format(suma, numb))
elif suma % numb == 0:
    print("{}".format(suma//numb))
else:
    print("{} {}/{}".format(suma // numb, suma % numb, numb))

L1-010 比较大小

# 开发人:Agu
# 开发时间: 2024/3/20  19:38
a = list(map(int, input().split()))
a.sort()
print("{}->{}->{}".format(a[0], a[1], a[2]))

L1-011 A-B

s1 = input()
s2 = input()
for i in s2:
    s1 = s1.replace(i,'')
print(s1)

L1-012 计算指数

n = int(input())
cnt = 1
for i in range(n):
    cnt *= 2
print("2^{} = {}".format(n, cnt))

L1-013 计算阶乘和

# 开发人:Agu
# 开发时间: 2024/3/20  21:00
n = int(input())
a = []
cnt = 1
for i in range(2, n+2):
    for j in range(1, i):
        cnt *= j
    a.append(cnt)
    cnt = 1

print(sum(a))

L1-015 跟奥巴马一起画方块

# 开发人:Agu
# 开发时间: 2024/3/20  21:13

def pd(n):
    n = ((n * 10) // 2) % 10

    if n >= 5:
        return True
    else:
        return False

if __name__ =="__main__":
    n = 0
    nm = list(input().split())
    nm[0] = int(nm[0])
    if pd(nm[0]):
        n = nm[0] // 2 + 1
    else:
        n = nm[0] // 2
    for i in range(n):
        for j in range(nm[0]):
            print(nm[1], end='')
        print()

2024.3.21

L1-016 查验身份证

# 开发人:Agu
# 开发时间: 2024/3/21  17:32
d = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
a = [[0] * 18 for i in range(105)]
b = []
cnt = 0

def change(a):
    if a == 0:
        a = '1'
    elif a == 1:
        a = '0'
    elif a == 2:
        a = 'X'
    elif a == 3:
        a = '9'
    elif a == 4:
        a = '8'
    elif a == 5:
        a = '7'
    elif a == 6:
        a = '6'
    elif a == 7:
        a = '5'
    elif a == 8:
        a = '4'
    elif a == 9:
        a = '3'
    elif a == 10:
        a = '2'
    return a

if __name__ == '__main__':
    n = int(input())
    for i in range(n):
        a[i] = input()
    #print(a)
        num = 0
        for j in range(17):
            if a[i][j] == 'X':
                b.append(a[i])
                num = -1
                break
            else:
                num += d[j] * int(a[i][j])
        #print(num)
        if num != -1:
            cnt = num % 11
            #print(cnt)
            cnt = change(cnt)
            #print(cnt)
            if cnt != a[i][17]:
                b.append(a[i])

    if len(b) != 0:
        for i in b:
            print(i)
    else:
        print("All passed")

2024.3.22

L1-017 到底有多二

# 开发人:Agu
# 开发时间: 2024/3/22  16:07
n = input()
cnt = 0
num = 0
m = len(n)
#print(m)
for i in range(len(n)):
    if n[i] == '2':
        cnt += 1
#print(cnt)
num = float(cnt / m)
if n[0] == '-':
    num = 0
    num = float(cnt / (m - 1))
    #print(num)
    num = num * 1.5
    #print(num)
if int(n[m - 1]) % 2 == 0:
    num = num * 2
    #print(num)
num = num * 100
#print(cnt)
print('%.2f%%' % num)

L1-018 大笨钟

# 开发人:Agu
# 开发时间: 2024/3/22  16:33
nm = list(input().split(":"))
if int(nm[0]) <= 12:
    print("Only {}:{}.  Too early to Dang.".format(nm[0], nm[1]))
else:
    if int(nm[1]) > 0:
        nm[0] = int(nm[0]) + 1
    for i in range(int(nm[0]) - 12):
        print("Dang", end='')

2024.3.23

L1-023 输出GPLT

# 开发人:Agu
# 开发时间: 2024/3/23  14:07
nm = input()
a = 0
b = 0
c = 0
d = 0
for i in nm:
    if i == 'G' or i == 'g':
        a += 1
    elif i == 'P' or i == 'p':
        b += 1
    elif i == 'L' or i == 'l':
        c += 1
    elif i == 'T' or i == 't':
        d += 1
while a > 0 or b > 0 or c > 0 or d > 0:
    if a > 0:
        print('G', end='')
        a -= 1
    if b > 0:
        print('P', end='')
        b -= 1
    if c > 0:
        print('L', end='')
        c -= 1
    if d > 0:
        print('T', end='')
        d -= 1

L1-028 判断素数

# 开发人:Agu
# 开发时间: 2024/3/23  14:52
import math

def pd(x):
    if x == 1:
        return False
    if x == 2:
        return True
    for i in range(2, int(math.sqrt(x))):
        if x % i == 0:
            return False
    return True

if __name__ == "__main__":
    n = int(input())
    for i in range(n):
        m = int(input())
        if pd(m):
            print('Yes')
        else:
            print('No')

2024.3.28

L1-025 正整数A+B

# 开发人:Agu
# 开发时间: 2024/3/28  14:43
n = ''
m = ''
a = input()
count = 0
count1 = 0
count2 = 0

for i in range(len(a)):
    if a[i] == ' ':
        count0 = i + 1
        #print(count0)
        break
    n = n + a[i]
#print(n)

for i in range(count0, len(a)):
    m = m + a[i]
#print(m)

for i in n:
    if i < '0' or i > '9':
        count1 = 1
        break

for i in m:
    if i < '0' or i > '9':
        count2 = 1
        break

if count2 == 1 and count1 == 1:
    print("? + ? = ?")
if count2 == 1 and count1 == 0:
    print("{} + ? = ?".format(n))
if count2 == 0 and count1 == 1:
    print("? + {} = ?".format(m))
if count2 == 0 and count1 == 0:
    num = int(n) + int(m)
    print("{} + {} = {}".format(n, m, num))

L1-032 Left-pad

# 开发人:Agu
# 开发时间: 2024/3/28  16:28

n, m = input().split()
n = int(n)
nm = input()
cnt = len(nm)
#print(cnt)

num = n - cnt
#print(num)

if num >= 0:
    print(m * num + nm)
else:
    num = abs(num)
    for i in range(num, cnt):
        print(nm[i], end='')

L1-034 点赞

num = int(input())  # 输入数字的个数
dict_feature = {}  # 创建一个空字典用于存储数字和其出现次数

for _ in range(num):
    data = input().split()[1:]  # 输入数字并将其转换为列表
    for j in data:
        dict_feature[int(j)] = dict_feature.get(int(j), 0) + 1  # 使用字典的get方法来计数

# 将字典中的键值对按照值的降序和键的降序进行排序
list_dict = sorted(dict_feature.items(), key=lambda x: (-x[1], -x[0]))

# 打印排序后的字典的第一个元素,即出现次数最多的数字及其出现次数
most_common_feature, count = list_dict[0]
print(f'{most_common_feature} {count}')

2024.4.15

L1-035 情人节

# 开发人:Agu
# 开发时间: 2024/4/15  14:44

arr = [0]
c1 = 0
c2 = 0


while arr[-1] != '.':
    arr.append(input())
# print(arr)

if len(arr) > 3:
    if arr[2] != ' ':
        c1 = 1

if len(arr) > 15:
    if arr[14] != ' ':
        c2 = 1

if c1 == 1 and c2 == 1:
    print("{} and {} are inviting you to dinner...".format(arr[2], arr[14]))
if c1 == 1 and c2 == 0:
    print("{} is the only one for you...".format(arr[2]))
if c1 == 0:
    print("Momo... No one is for you ...")

L1-030 一帮一

# 开发人:Agu
# 开发时间: 2024/4/15  15:21
c = int(input())
mid = int(c / 2)
a = []
cnt = []
for i in range(c):
    n, m = input().split()
    a.append(m)
    n = int(n)
    cnt.append(n)
# print(a)
# print(cnt)

for i in range(mid):
    # print(a[i])
    for j in range(c - i - 1, mid - 1, -1):
        # print(a[j])
        if cnt[i] != cnt[j]:
            print("{} {}".format(a[i], a[j]))
            a.pop(j)
            cnt.pop(j)
            break

L1-039 古风排版

# 开发人:Agu
# 开发时间: 2024/4/15  16:47
import math
n = int(input())
x = 0
string = input()
m = math.ceil(len(string) / n)

a = [[0] * m for i in range(n)]
for i in range(m-1, -1, -1):
    for j in range(0, n):
        if x < len(string):
            a[j][i] = string[x]
            x += 1

for i in range(n):
    for j in range(m):
        if a[i][j] == 0:
            a[i][j] = ' '
        print(a[i][j], end='')
    print()

L1-043 阅览室

import sys  
def toMin(x):              #时间转换函数
    hour_0 = int(x[0:2])
    min_0 = int(x[3:5])
    out_min = hour_0*60+min_0
    return out_min
def rounding(x):                 #四舍五入函数
    x = str(x)
    decimal = int(x[x.index('.')+1])
    if decimal >= 5:
        return int(x[0:x.index('.')])+1
    else :
        return int(x[0:x.index('.')])
in_1 = int(sys.stdin.readline())          #标准输入一行
sum_0,sum_num,sum_min,dict_1 = 0,0,0,{}
while True:
    in_2,in_3,in_4 = sys.stdin.readline().split() #标准输入一行并切分
    if in_2 == '0':                           
        try :                                      #统计一天时间的借书结果
            print("{} {}".format(sum_num,rounding(sum_min/sum_num)))
        except :
            print("0 0")
        sum_0 += 1
        dict_1 = {}
        sum_num = 0
        sum_min = 0
    else :                                       
        if in_2 in dict_1:
            if dict_1[in_2][0] == 'S' and in_3 == 'E':   #存入还书记录
                sum_min = sum_min + (toMin(in_4)-toMin(dict_1[in_2][1]))
                dict_1.pop(in_2)
                sum_num += 1
            else :                       #存入借书记录
                dict_1[in_2] = [in_3,in_4]
        else :                          #存入借书记录
            dict_1[in_2] = [in_3,in_4]
    if sum_0 == in_1:
        break               

2024.4.17

L3-032 关于深度优先搜索和逆序对的题应该不会很难吧这件事

2024.4.18

L2-006 树的遍历

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

n=int(input())
host=list(map(int,input().split()))
inorder=list(map(int,input().split()))


def buildTree(inorder, postorder) -> TreeNode:
    def helper(in_left, in_right):
        
    # 如果这里没有节点构造二叉树了,就结束
        if in_left > in_right:
            return None

        # 选择 post_idx 位置的元素作为当前子树根节点
        val = postorder.pop()
        root = TreeNode(val)

        # 根据 root 所在位置分成左右两棵子树
        index = idx_map[val]

        # 构造右子树
        root.right = helper(index + 1, in_right)
        # 构造左子树
        root.left = helper(in_left, index - 1)
        return root
    idx_map = {val:idx for idx, val in enumerate(inorder)} 
    return helper(0, len(inorder) - 1)

p=buildTree(inorder,host)
q=[p]
res=[]
while(len(q)!=0):
    m=q.pop(0)
    if m!=None:
        res.append(m.val)
    if m.left!=None:
        q.append(m.left)
    if m.right!=None:
        q.append(m.right)
print(*res)

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值