pat乙级
琉璃依
这个作者很懒,什么都没留下…
展开
-
pat乙级1034 有理数四则运算 (20 分) python fractions库做法
fractions库是一个分数计算有关的库 可以执行分数的计算 输出也是分数易错点:输入的两个数 最终也要化为最简的带分数带分数:代码如下from fractions import Fractionm, n = input().split()m, n = Fraction(m), Fraction(n)#转化为库的分数形式 会自动化简到最简分数def fraction_to_mixed_number(fraction): if "/" not in str(fraction) or..原创 2021-08-14 12:39:26 · 194 阅读 · 0 评论 -
pat乙级 1032 挖掘机技术哪家强 (20 分) python无超时
题目很简单 难点在于python效率导致测试点3耗时过长,需要优化ac代码:import sys#使用sys.stdin.readline()代替input()manypeople=int(input())#用数组下标表示学校编码,用一位数组代替字典或者二维数组 使查找操作耗时少scores=[0]*(manypeople+1)for index in range(1,manypeople+1): inp=list(map(int,sys.stdin.readline().split.原创 2021-08-11 01:44:11 · 321 阅读 · 0 评论 -
pat乙级1031 查验身份证 (15 分)较精简代码 python
很简单的题 可以用列表和异常处理来简化见代码sys.stdin.readline()和input()作用一样 但是性能更优import sys#权重与对应关系 weight = [7, 9, 10, 5, 8,4,2,1,6,3,7,9,10,5,8,4,2]M=["1","0","X","9","8","7","6","5","4","3","2"]many=int(sys.stdin.readline())result=[]for i in range(0,many): ..原创 2021-08-11 01:12:34 · 126 阅读 · 0 评论 -
pat乙级1030 完美数列 (25 分) python
这个题测试点4易超时在遍历时注意:少用len()函数 少用list.index()函数 过于耗费时间在初始给你列表长度的时候 就不要自己再用len求一边了(最初想将maxvalue=(-p*完美数列第一项)加入列表副本 根据绝对值对列表副本排序 然后用maxvalue的index将列表副本分割 最后分割出的列表长度就是这个完美数列的长度(但是这样做 会在每次更换最小值时产生新的maxvalue 对列表副本重新排序 找maxvalue的index 极其耗费时间 除了ac不了没啥问题(最后选择了双重.原创 2021-08-11 00:39:19 · 160 阅读 · 0 评论 -
pat 乙级1029 旧键盘 (20 分)python
做出来很简单 应用in 和not in即可用集合去重 用列表生成式生成列表t_str=list(input())f_str=list(input())resulto=[x.title() for x in t_str if x not in f_str]#对resulto去重 且不改变列表顺序result=list(set(resulto))result.sort(key=resulto.index)for x in result: print(x,end="")..原创 2021-08-10 01:26:22 · 99 阅读 · 0 评论 -
pat乙级 1028 人口普查 (20 分) python 无超时
由于python的性能问题 面对大量输入数据 写入列表会很慢并且input()性能低于sys.stdin.readline()所以不用列表来保存最后结果python可以直接比较"1081/05/06"与"1555/04/23"这种日期大小(总有现成的轮子用是吧import systotal_num = int(input())if total_num == "0": print("0")else: ori = [""] * total_num data_people .原创 2021-08-10 01:23:04 · 171 阅读 · 0 评论 -
pat乙级1027 打印沙漏 (20 分) python
一点数学小知识沙漏看成两个三角形再去掉一个将三角形的一行看为等差数列的一项一个三角形消耗的符号个数为n2所以应该有2*n2-1<=总符号个数inp = input().split()total = int(inp[0])l = [inp[1] * n for n in range(-1, 2010, 2)]result = []for x in range(1, int(((total + 1) / 2) ** 0.5) + 1): result.append(l[x]).原创 2021-08-10 01:18:57 · 84 阅读 · 0 评论 -
pat乙级1026 程序运行时间 (15 分) python
基本没有难度 知道用//和% 就行四舍五入 可以+0.5再intinp=list(map(int,input().split()))ori_time=(inp[1]-inp[0])/100print("%02d:%02d:%02d"%(int(ori_time//3600),int(ori_time%3600//60),int(ori_time%3600%60+0.5)))原创 2021-08-10 01:13:06 · 85 阅读 · 0 评论 -
pat乙级 1023 组个最小数 (20 分) python
inp=input().split()#获取输入num=[]for index in range(0,10): num+=int(inp[index])*str(index) #将所有数字加到列表 如3个1 列表就是[1,1,1]num.sort()#再从小到大排序result=num[:]#从num头部找起 第一个不是零的数就是可以开头的最小数字for i in num: if i =="0": continue else: .原创 2021-08-10 01:11:19 · 48 阅读 · 0 评论 -
pat乙级1021 个位数统计 (15 分)python
基本没难度 记得用count方法 省事inp=list(input())inpset=sorted(set(inp))#集合去重 再拍个序 满足题目要求for i in inpset: print(f"{i}:{inp.count(i)}")原创 2021-08-10 01:06:15 · 71 阅读 · 0 评论 -
pat 乙级1019 数字黑洞 (20 分) python
def is_equal(num): num = str(num).zfill(4) i = num[0] if num.count(i) == 4: return True else: return Falsedef get_max(num): # 指从左到右 为从大到小 num = str(num).zfill(4) _ = sorted(list(map(int, list(num))), reverse=Tr..原创 2021-08-10 01:03:47 · 95 阅读 · 0 评论 -
pat乙级1016 部分A+B (15 分) python
a, da, b, db = input().split()if a.count(da) * a != "": pa = int(a.count(da) * da)else: pa = 0if b.count(db) * b != "": pb = int(b.count(db) * db)else: pb = 0print(pa+pb)没啥好说的 都不想写这个题 注意一下 不存在的时候的情况...原创 2021-08-10 01:01:12 · 75 阅读 · 0 评论 -
pat乙级1007 素数对猜想 (20 分) python 素数筛法
```pythonclass Thired: def __init__(self): pass def biaoji(self, dic, N): for i in dic.copy(): if dic[i] and self.is_sushu(i): for j in range(i, N + 1): if i * j <= N: ..原创 2021-08-10 00:57:09 · 76 阅读 · 0 评论