PAT 天梯赛练习题

L1-001 Hello World

1
print("Hello World")

L1-002 打印沙漏

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import math

# n为正整数,s为符号
n, s = input().split(" ")

n = int(n)
k = int(math.sqrt((n+1)/2))

surplus = n-2*k**2+1

for i in range(k):
print(" "*i, end="")
print(s*(2*(k-i)-1))
for i in range(2, k+1):
print(" "*(k-i), end="")
print(s*(2*i-1))
print(surplus)

L1-003 个位数统计

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

N = input()
d = {}
"""
input:
100311
output:
0:2
1:3
3:1
"""
# 将N的每一位作为字典的键,并统计其次数
for i in N:
d[i] = d.get(i, 0)+1

# 排序后输出
lst = list(d.items())
lst.sort(key=lambda x: x[0])
for k in lst:
D, M = k
print("{}:{}".format(D, M))

L1-004 计算摄氏温度

给定一个华氏温度F,本题要求编写程序,计算对应的摄氏温度C。计算公式:C=5×(F−32)/9。题目保证输入与输出均在整型范围内。

1
2
3
4
F = int(input())
C = 5*(F-32)/9
C = int(C)
print(f"Celsius = {C}")

L1-006 连续因子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import math
# 最长连续因子个数
maxLen = 0
# 连续因子
resultList = []
# 标识是否为质数
isPrimeNum = True
# 输入在一行中给出一个正整数 N(1<N<2^31)
N = int(input())
# 从2开始依次遍历至最大因子
# 输入n后,从2开始到根号N,分别求最长连续因子
for i in range(2, int(math.sqrt(N))+1):
tempNum = N
tempList = []
start = i
# 一轮遍历
while tempNum % start == 0:
isPrimeNum = False
tempNum = tempNum//start
tempList.append(str(start))
start += 1
tempLen = start-i
if tempLen > maxLen:
resultList = tempList
maxLen = tempLen

if isPrimeNum == True:
print(1)
print(N)
else:
print(maxLen)
print("*".join(resultList))

l1-007 念数字

输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出fu字。十个数字对应的拼音如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# 1. 列表
# 末尾没有空格(先输出前n-1项,再输出最后一项)
pinyin_list = ['ling', 'yi', 'er', 'san',
'si', 'wu', 'liu', 'qi', 'ba', 'jiu']

num = input()

for i in num[0:-1]:
if i == '-':
print(f"fu", end=' ')
else:
print(f"{pinyin_list[int(i)]}", end=' ')

print(pinyin_list[int(num[-1])])

# 2. 字符串拼接(会有额外的内存开销)
pinyin_list = ['ling', 'yi', 'er', 'san',
'si', 'wu', 'liu', 'qi', 'ba', 'jiu']
num = input()
s = ''
for i in num:
if i == '-':
# print("fu",end=' ')
s += "fu"+" "
else:
s += f"{pinyin_list[int(i)]}"+" "
print(s.strip())

# 3. 字典(个人比较推荐字典的这种方法,)
pinyin_dic = {'0': 'ling', '1': 'yi', '2': 'er', '3': 'san',
'4': 'si', '5': 'wu', '6': 'liu', '7': 'qi', '8': 'ba', '9': 'jiu'}
num = input()
for n in num[0:-1]:
if n == '-':
print('fu', end=' ')
else:
print(pinyin_dic[n], end=' ')
print(pinyin_dic[num[-1]])

l1-008 求整数段和

给定两个整数A和B,输出从A到B的所有整数以及这些数的和。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
A, B = map(int, input().split())
# 总和
s = 0
# 计数器
n = 0
# 遍历A-B
for i in range(A, B+1):
# >5d表示让每个字符右对齐并占五个字符宽度
print("{:>5d}".format(i), end='')
s += i
n += 1
# 一行打印五个数
if n % 5 == 0:
print("\n", end='')
n = 0
# 到最后一个数时换行打印Sum
elif i == B:
print("\n", end='')
print(f"Sum = {s}")