当前位置:   article > 正文

PAT乙级真题(Python3)_第 1 行给出正整数 t,是测试用例的个数。随后给出 t 组测试用例,每组占一行,顺序

第 1 行给出正整数 t,是测试用例的个数。随后给出 t 组测试用例,每组占一行,顺序

A+B和C (15)

题目描述

给定区间[-2的31次方, 2的31次方]内的3个整数A、B和C,请判断A+B是否大于C。

输入描述:

输入第1行给出正整数T(<=10),是测试用例的个数。随后给出T组测试用例,每组占一行,顺序给出A、B和C。整数间以空格分隔。

输出描述:

对每组测试用例,在一行中输出“Case #X: true”如果A+B>C,否则输出“Case #X: false”,其中X是测试用例的编号(从1开始)。

代码如下:

  1. num = eval(input())
  2. for i in range(num):
  3. case = input()
  4. case = case.split(' ')
  5. if(round(eval(case[0]),1)+round(eval(case[1]),1)>round(eval(case[2]),1)):
  6. print("Case #{}: true".format(i+1))
  7. else:
  8. print("Case #{}: false".format((i+1)))

数字分类 (20)

题目描述

给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字:

A1 = 能被5整除的数字中所有偶数的和;
A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2+n3-n4...;
A3 = 被5除后余2的数字的个数;
A4 = 被5除后余3的数字的平均数,精确到小数点后1位;
A5 = 被5除后余4的数字中最大数字。

输入描述:

每个输入包含1个测试用例。每个测试用例先给出一个不超过1000的正整数N,随后给出N个不超过1000的待分类的正整数。数字间以空格分隔。

输出描述:

对给定的N个正整数,按题目要求计算A1~A5并在一行中顺序输出。数字间以空格分隔,但行末不得有多余空格。
若其中某一类数字不存在,则在相应位置输出“N”。

代码如下:

  1. n = input()
  2. nums = list(map(int,n.split(' ')))
  3. A = [0]*5
  4. t1,t2=0,0
  5. for i in range(1,len(nums)):
  6. if nums[i]%10==0:
  7. A[0]+=nums[i]
  8. elif nums[i]%5==1:
  9. t1+=1
  10. if t1%2==0:
  11. A[1]-=nums[i]
  12. else:
  13. A[1]+=nums[i]
  14. elif nums[i]%5==2:
  15. A[2]+=1
  16. elif nums[i]%5==3:
  17. A[3]+=nums[i]
  18. t2+=1
  19. elif nums[i]%5==4:
  20. if A[4]<nums[i]:
  21. A[4]=nums[i]
  22. for i in range(5):
  23. if A[i]==0:
  24. A[i]='N'
  25. if(A[3]!='N'):
  26. A[3]=round(A[3]/t2,1)
  27. print("{} {} {} {} {}".format(A[0],A[1],A[2],A[3],A[4]))

福尔摩斯的约会 (20)

题目描述

大侦探福尔摩斯接到一张奇怪的字条:“我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm”。大侦探很

 快就明白了,字条上奇怪的乱码实际上就是约会的时间“星期四 14:04”,因为前面两字符串中第1对相同的大写英文字母(大小写有区分)是

 第4个字母'D',代表星期四;第2对相同的字符是'E',那是第5个英文字母,代表一天里的第14个钟头(于是一天的0点到23点由数字0到9、

 以及大写字母A到N表示);后面两字符串第1对相同的英文字母's'出现在第4个位置(从0开始计数)上,代表第4分钟。现给定两对字符串,

 请帮助福尔摩斯解码得到约会的时间。

输入描述:

输入在4行中分别给出4个非空、不包含空格、且长度不超过60的字符串。

输出描述:

在一行中输出约会的时间,格式为“DAY HH:MM”,其中“DAY”是某星期的3字符缩写,即MON表示星期一,TUE表示星期二,WED表示星期三,THU表示星期
四,FRI表示星期五,SAT表示星期六,SUN表示星期日。题目输入保证每个测试存在唯一解。

代码如下:

  1. item1 = input()
  2. item2 = input()
  3. item3 = input()
  4. item4 = input()
  5. time = []
  6. t = 0
  7. for i in range(len(item1)):
  8. if item1[i]==item2[i]and (item2[i]>='A'and item2[i]<='Z'):
  9. t = ord(item2[i])-ord('A')+1
  10. t%=7
  11. if t==0:
  12. time.append("SUN")
  13. elif t==1:
  14. time.append("MON")
  15. elif t==2:
  16. time.append("TUE")
  17. elif t==3:
  18. time.append("WED")
  19. elif t==4:
  20. time.append("THU")
  21. elif t==5:
  22. time.append("FRI")
  23. elif t==6:
  24. time.append("SAT")
  25. t = i+1
  26. break
  27. for i in range(t,len(item1)):
  28. if item1[i]==item2[i]:
  29. if item1[i]>='0'and item1[i]<='9':
  30. time.append(str(0)+item1[i])
  31. elif item1[i]>='A'and item1[i]<='N':
  32. t = ord(item1[i])-ord('A')+10
  33. time.append(t)
  34. break
  35. for i in range(len(item3)):
  36. if item3[i]==item4[i]and item3[i].isalpha():
  37. if i>=10:
  38. time.append(i)
  39. else:
  40. time.append(str(0)+str(i))
  41. break
  42. print("{} {}:{}".format(time[0], time[1], time[2]))

德才论 (25)

题目描述

宋代史学家司马光在《资治通鉴》中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之
小人。凡取人之术,苟不得圣人,君子而与之,与其得小人,不若得愚人。”

现给出一批考生的德才分数,请根据司马光的理论给出录取排名。

输入描述:

输入第1行给出3个正整数,分别为:N(<=105),即考生总数;L(>=60),为录取最低分数线,即德分和才分均不低于L的考生才有资格
被考虑录取;H(<100),为优先录取线——德分和才分均不低于此线的被定义为“才德全尽”,此类考生按德才总分从高到低排序;才分不到
但德分到线的一类考生属于“德胜才”,也按总分排序,但排在第一类考生之后;德才分均低于H,但是德分不低于才分的考生属于“才德兼
亡”但尚有“德胜才”者,按总分排序,但排在第二类考生之后;其他达到最低线L的考生也按总分排序,但排在第三类考生之后。

随后N行,每行给出一位考生的信息,包括:准考证号、德分、才分,其中准考证号为8位整数,德才分为区间[0, 100]内的整数。数字间以空格分隔。

输出描述:

输出第1行首先给出达到最低分数线的考生人数M,随后M行,每行按照输入格式输出一位考生的信息,考生按输入中说明的规则从高到低排序。当某类考生中有多人
总分相同时,按其德分降序排列;若德分也并列,则按准考证号的升序输出。

代码如下:

  1. def met(ranks):
  2. return -ranks[1]-ranks[2],-ranks[1],ranks[0]
  3. lt = list(map(int,input().split()))
  4. num = lt[0]
  5. rank1 = []
  6. rank2 = []
  7. rank3 = []
  8. rank4 = []
  9. for i in range(lt[0]):
  10. ls = list(map(int,input().split()))
  11. if ls[1]>=lt[2] and ls[2]>=lt[2]:
  12. rank1.append(ls)
  13. elif ls[1]>=lt[2] and lt[1]<=ls[2]<lt[2]:
  14. rank2.append(ls)
  15. elif ls[1]>=ls[2] and lt[1]<=ls[2]:
  16. rank3.append(ls)
  17. elif ls[1]>=lt[1] and ls[2]>=lt[1]:
  18. rank4.append(ls)
  19. else:
  20. num-=1
  21. print(num)
  22. for l in (rank1,rank2,rank3,rank4):
  23. l.sort(key = met)
  24. for j in range(len(l)):
  25. print("{} {} {}".format(l[j][0],l[j][1],l[j][2]))

部分A+B (15)

题目描述

正整数A的“DA(为1位整数)部分”定义为由A中所有DA组成的新整数PA。例如:给定A = 3862767,DA = 6,则A的“6部分”PA是66,因为A中有2个6。
 
 现给定A、DA、B、DB,请编写程序计算PA + PB。

输入描述:

输入在一行中依次给出A、DA、B、DB,中间以空格分隔,其中0 < A, B < 1010。

输出描述:

在一行中输出PA + PB的值。

代码如下:

  1. ls = list(map(str,input().split()))
  2. t1,t2=0,0
  3. for i in range(len(ls[0])):
  4. if ls[0][i]==ls[1]:
  5. t1+=1
  6. for i in range(len(ls[2])):
  7. if ls[2][i]==ls[3]:
  8. t2+=1
  9. sum=0
  10. for i in range(t1):
  11. sum+=int(ls[1])*pow(10,i)
  12. for i in range(t2):
  13. sum+=int(ls[3])*pow(10,i)
  14. print(sum)

A除以B (20)

题目描述

本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数。你需要输出商数Q和余数R,使得A = B * Q + R成立。

输入描述:

输入在1行中依次给出A和B,中间以1空格分隔。

输出描述:

在1行中依次输出Q和R,中间以1空格分隔。

代码如下:

  1. ls = list(map(str,input().split()))
  2. lt = []
  3. t = 0
  4. lk = []
  5. sum=0
  6. for i in range(len(ls[0])):
  7. t*=10
  8. t+=int(ls[0][i])
  9. if (i+1)%8==0:
  10. k=t//int(ls[1])
  11. num = 8-len(str(k))
  12. if i!=7:
  13. for j in range(num):
  14. lt.append('0')
  15. lt.append(str(k))
  16. t = t-k*int(ls[1])
  17. sum = t
  18. k = len(ls[0])%8
  19. ls[0] = ls[0][::-1]
  20. for i in range(k):
  21. lk.append(ls[0][i])
  22. lk = lk[::-1]
  23. t = sum
  24. for i in range(k):
  25. t*=10
  26. t+=int(lk[i])
  27. K = t // int(ls[1])
  28. num = k - len(str(K))
  29. for j in range(num):
  30. lt.append("0")
  31. lt.append(str(K))
  32. t = t - K * int(ls[1])
  33. for i in range(len(lt)):
  34. print(lt[i],end='')
  35. print(" {}".format(t))

锤子剪刀布 (20)

题目描述

大家应该都会玩“锤子剪刀布”的游戏:
现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。

输入描述:

输入第1行给出正整数N(<=105),即双方交锋的次数。随后N行,每行给出一次交锋的信息,即甲、乙双方同时给出的的手势。C代表“锤子”、J代表“剪刀”、B代
表“布”,第1个字母代表甲方,第2个代表乙方,中间有1个空格。

输出描述:

输出第1、2行分别给出甲、乙的胜、平、负次数,数字间以1个空格分隔。第3行给出两个字母,分别代表甲、乙获胜次数最多的手势,中间有1个空格。如果解不唯
一,则输出按字母序最小的解。

代码如下:

  1. num = eval(input())
  2. ls = []
  3. ResultJ = [0,0,0,0,0,0]
  4. ResultY = [0,0,0,0,0,0]
  5. for i in range(num):
  6. ls.append(list(map(str,input().split())))
  7. if ls[i][0]=='J' and ls[i][1]=='C':
  8. ResultY[0]+=1
  9. ResultJ[2]+=1
  10. ResultY[4]+=1
  11. elif ls[i][0]=='J' and ls[i][1]=='B':
  12. ResultJ[0]+=1
  13. ResultY[2]+=1
  14. ResultJ[5]+=1
  15. elif ls[i][0]=='C' and ls[i][1]=='B':
  16. ResultJ[2]+=1
  17. ResultY[0]+=1
  18. ResultY[3]+=1
  19. elif ls[i][0]=='C' and ls[i][1]=='J':
  20. ResultJ[0]+=1
  21. ResultY[2]+=1
  22. ResultJ[4]+=1
  23. elif ls[i][0]=='B' and ls[i][1]=='C':
  24. ResultJ[0]+=1
  25. ResultY[2]+=1
  26. ResultJ[3]+=1
  27. elif ls[i][0]=='B' and ls[i][1]=='J':
  28. ResultJ[2]+=1
  29. ResultY[0]+=1
  30. ResultY[5]+=1
  31. elif (ls[i][0]=='B' and ls[i][1]=='B')or(ls[i][0]=='J' and ls[i][1]=='J')or(ls[i][0]=='C' and ls[i][1]=='C'):
  32. ResultJ[1]+=1
  33. ResultY[1]+=1
  34. for i in range(3):
  35. if i in ([0,1]):
  36. print(ResultJ[i],end=' ')
  37. else:
  38. print(ResultJ[i])
  39. for i in range(3):
  40. if i in ([0,1]):
  41. print(ResultY[i],end = ' ')
  42. else:
  43. print(ResultY[i])
  44. MaxJ = max(ResultJ[3],ResultJ[4],ResultJ[5])
  45. MaxY = max(ResultY[3],ResultY[4],ResultY[5])
  46. for i in range(3,6):
  47. if ResultJ[3]==MaxJ:
  48. print("B ",end='')
  49. break
  50. elif ResultJ[4]==MaxJ:
  51. print("C ",end='')
  52. break
  53. else:
  54. print("J ",end='')
  55. for i in range(3,6):
  56. if ResultY[3]==MaxY:
  57. print("B")
  58. break
  59. elif ResultY[4]==MaxY:
  60. print("C")
  61. break
  62. else:
  63. print("J")

个位数统计 (15)

题目描述

给定一个k位整数N = dk-1*10k-1 + ... + d1*101 + d0 (0<=di<=9, i=0,...,k-1, dk-1>0),请编写程序统计每种不同的个位数字出现的次数。例如:给定N = 100311,则有2个0,3个1,和1个3。

输入描述:

每个输入包含1个测试用例,即一个不超过1000位的正整数N。

输出描述:

对N中每一种不同的个位数字,以D:M的格式在一行中输出该位数字D及其在N中出现的次数M。要求按D的升序输出。

代码如下:

  1. number = input()
  2. number = str(number)+' '
  3. num = set(number)
  4. num = list(num)
  5. num.sort()
  6. for i in range(1,len(num)):
  7. print("{}:{}".format(num[i],number.count(num[i])))

D进制的A+B (20)

题目描述

输入两个非负10进制整数A和B(<=230-1),输出A+B的D (1 < D <= 10)进制数。

输入描述:

输入在一行中依次给出3个整数A、B和D。

输出描述:

输出A+B的D进制数。

代码如下:

  1. r = ''
  2. tmp = list(map(int,input().split()))
  3. a = tmp[0]+tmp[1]
  4. d = tmp[2]
  5. while a:
  6. r+=str(a%d)
  7. a = a//d
  8. print (r[::-1])

组个最小数 (20)

题目描述

给定数字0-9各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意0不能做首位)。例如:
给定两个0,两个1,三个5,一个8,我们得到的最小的数就是10015558。

现给定数字,请编写程序输出能够组成的最小的数。

输入描述:

每个输入包含1个测试用例。每个测试用例在一行中给出10个非负整数,顺序表示我们拥有数字0、数字1、……数字9的个数。整数间用一个空
格分隔。10个数字的总个数不超过50,且至少拥有1个非0的数字。

输出描述:

在一行中输出能够组成的最小的数。

代码如下:

  1. lt = list(map(int,input().split()))
  2. t=0
  3. for i in range(10):
  4. if i==0:
  5. continue
  6. if t==0:
  7. if lt[i]>0:
  8. print(i,end='')
  9. print('0'*lt[0],end='')
  10. print(str(i)*(lt[i]-1),end='')
  11. t+=1
  12. else:
  13. print(str(i)*lt[i],end='')

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/93690
推荐阅读
相关标签
  

闽ICP备14008679号