在学习程序设计时,我们发现算法是一个难点,我们从’简单模拟’, ‘查找元素’, ‘图形输出’, ‘进制转换’, ‘字符串处理’,‘排序’,‘散列’,‘贪心’,‘二分’,‘two pointers’,‘其他’,‘数学’,‘链表’,几个角度分析算法的考试和训练策略,接下来几天我们会分题型讲解,如果你正在准备PAT甲乙级算法的考试和训练,会大有帮助,祝早日金榜题名。
在程序设计的比赛和考试中,我常用的方法有10种,求值法,递推法,递归法,枚举法,模拟法,分治法,贪心法,回溯法,构造法和动态规划。学习完这些方法后,编程水平快速提高,避免所有问题,都暴力求解
掌握了以上的方法,可以快速打开思路,然后我会解答在PAT中常见的疑惑。
题型1:在一行输入,以空格分隔。
公式:
a = list(map(int,input().split()))
第3章-1 大于身高的平均值 (10 分)
中小学生每个学期都要体检,要量身高,因为身高可以反映孩子的生长状况。现在,一个班的身高已经量好了,请输出其中超过平均身高的那些身高。程序的输入为一行数据,其中以空格分隔,每个数据都是一个正整数。程序要输出那些超过输入的正整数的平均数的输入值,每个数后面有一个空格,输出的顺序和输入的相同。
输入格式:
在一行输入中一个班的身高值,以空格分隔。
输出格式:
在一行输出超过输入的平均数的输入值,以空格分隔。
a = list(map(int,input().split()))
s=sum(a)
p=s/len(a)
for j in range(0,len(a)):
if p<a[j]:
print("{} ".format(a[j]),end="")
3章-2 查验身份证 (15 分)
一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:
首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值:
Z:0 1 2 3 4 5 6 7 8 9 10
M:1 0 X 9 8 7 6 5 4 3 2
现在给定一些身份证号码,请你验证校验码的有效性,并输出有问题的号码。
输入格式:
输入第一行给出正整数N(≤100)是输入的身份证号码的个数。随后N行,每行给出1个18位身份证号码。
输出格式:
按照输入的顺序每行输出1个有问题的身份证号码。这里并不检验前17位是否合理,只检查前17位是否全为数字且最后1位校验码计算准确。如果所有号码都正常,则输出All passed。
n = int(input())
w = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
s = 0
dic = {0:'1',1:'0',2:'X',3:'9',4:'8',5:'7',6:'6',7:'5',8:'4',9:'3',10:'2'}
for i in range(n):
r = []
m = input()
if not m[0:17].isdigit():
print(m)
s += 1
else:
for k in range(17):
r.append(w[k]*int(m[k]))
if dic[sum(r)%11] != m[17]:
print(m)
s += 1
if s == 0:
print('All passed')
题型2:不用列表元组解决问题
第3章-20 逆序的三位数 (10 分)
程序每次读入一个正3位数,然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。
输入格式:
每个测试是一个3位的正整数。
输出格式:
输出按位逆序的数。
n=input()
a=int(n[0])
b=int(n[1])
c=int(n[2])
print(a+b*10+c*100)
其他题目和源码见,zip,喜欢的话就点赞关注一下吧。