PAT甲级题目整理分类
PAT甲级题目所有题目整理汇总
字符串类型题目
1001 A+B Format
计算 a+b, a+b 并以标准格式输出总和----也就是说,从最低位开始每隔三位数加进一个逗号(千位分隔符),如果结果少于四位则不需添加。
解题代码
1 |
|
1005 Spell it right
给定一个非负整数 NN,你的任务是计算 NN 的所有数字的总和,并以英语输出总和的每个数字。
解题代码
1 |
|
1006 Sign In and Sign Out
每天第一个到机房的人负责开门,最后一个从机房离开的人负责锁门。
现在,给定每个人的签到与签出记录,请你找出当天开门的人以及锁门的人分别是谁。
input:
1 | 3 |
output:
1 | SC3021234 CS301133 |
解题代码
1 |
|
1035 Password
解题代码
1 |
|
1036 Boys vs Girls
解题代码
1 |
|
1050 String Subtraction
解题代码
1 |
|
1 |
|
1071 Speech Pattern
解题代码
1 |
|
1061 Dating
大侦探福尔摩斯接到一张奇怪的字条:我们约会吧!3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm
。
大侦探很快就明白了,字条上奇怪的乱码实际上就是约会的时间星期四 14:04
,因为前面两字符串中第 11 对相同的大写英文字母(大小写有区分)是第 44 个字母 D,代表星期四;第 22 对相同的字符是 EE ,那是第 55 个英文字母,代表一天里的第 1414 个钟头(于是一天的 00 点到 2323 点由数字 00 到 99、以及大写字母 AA 到 NN 表示);后面两字符串第 11 对相同的英文字母 ss 出现在第 44 个位置(从 00 开始计数)上,代表第 44 分钟。
现给定两对字符串,请帮助福尔摩斯解码得到约会的时间。
补充
1、一对字符相同,是指在两个字符相同且在字符串的位置也相同。
2、前两个字符串中第一对相同的大写英文字母,是指第一对能够正确代表日期的大写英文字母。
3、前两个字符串中第二对相同的字符,是指位于代表日期的字符后面的,第一对相同的,能够正确代表小时的字符。
输入格式
输入在 44 行中分别给出 44 个非空、不包含空格、且长度不超过 6060 的字符串。
输出格式
在一行中输出约会的时间,格式为 DAY HH:MM
,其中 DAY
是某星期的 33 字符缩写,即 MON
表示星期一,TUE
表示星期二,WED
表示星期三,THU
表示星期四,FRI
表示星期五,SAT
表示星期六,SUN
表示星期日。
题目输入保证每个测试存在唯一解。
输入样例:
1 | 3485djDkxh4hhGE |
输出样例:
1 | THU 14:04 |
解题代码
1 |
|
1016 phone bills
长途电话公司按以下规则向客户收费:
拨打长途电话每分钟要花费一定的费用,具体收费取决于拨打电话的时间。
客户开始拨打长途电话的时间将被记录,客户挂断电话的时间也将被记录。
每个月都要给客户发送一次话费账单,账单中应包含每次通话记录以及相关收费等信息。
给定一组电话记录,你的工作是为客户准备帐单。
输入格式
输入包含两部分:费率结构和电话记录。
费率结构由一行组成,该行包含24个非负整数,分别表示从 00:00-01:00
的收费(分/分钟),从 01:00-02:00
的收费,以此类推…
下一行包含一个正整数 NN。
接下来 NN 行,每行包含一条记录。
每个记录由客户名称(最多 2020 个字符的字符串,不带空格),时间和日期(mm:dd:hh:mm
)以及单词 on-line
或 off-line
组成。
所有日期都在同一个月内,每个 on-line
记录都与按时间顺序排列的同一位客户的下一条记录配对,但前提是这条记录是 off-line
。
所有未与 off-line
记录配对的 on-line
记录以及未与 on-line
记录配对的 off-line
记录都必须忽略。
输入中至少包含一个成功的配对。
同一客户在同一时间不会有两个或以上的电话记录。
使用 2424 小时制记录时间。
输出格式
你需要为每个客户打印电话费。
账单必须按照客户姓名的字母顺序(按ASCII码顺序,大写字母在前,小写字母在后)打印。
对于每个客户,首先以示例显示的格式在一行中打印客户名称和帐单月份。
然后,对于每个通话时间段,在一行中分别打印开始和结束时间和日期(dd:hh:mm
),持续时间(以分钟为单位)和通话费用。
通话必须按时间顺序列出。
最后,以示例显示的格式打印该月的总费用。
注意,没有任何有效通话记录的客户直接忽略,不予打印账单。
数据范围
1≤N≤10001≤N≤1000
输入样例:
1 | 10 10 10 10 10 10 20 20 20 15 15 15 15 15 15 15 20 30 20 15 15 10 10 10 |
输出样例:
1 | CYJJ 01 |
银行排队
假设一家银行有 KK 个服务窗口。
窗户前面有一条黄线,将等候区分为两部分。
所有客户都必须在黄线后面排队等候,直到轮到他/她服务并且有可用的窗口为止。
假定一个窗口不能被单个客户占用超过 11 小时,即如果某位顾客的业务已经办理了一小时,则立即终止此项业务。
现在给定每个客户的到达时间 TT 和业务办理时间 PP,请计算所有客户的平均等待时间。
输入格式
第一行包含两个整数 NN 和 KK,分别表示客户数量以及窗口数量。
接下来 NN 行,每行包含两个时间,分别是一个客户的到达时间,用 HH:MM:SS
表示,以及一个客户的业务办理时间 PP(单位:分钟)。
HH
在 [00,23][00,23] 范围内,MM
和 SS
都在 [00,59][00,59] 范围内。
所有客户的到达时间均不相同。
请注意,银行的营业时间为 08:00
至 17:00
。
任何人提前到达都必须排队等候至 08:00
,而任何人来得太晚(在 17:00:01
或之后到达)都将不被服务也无需计入平均值。
注意只要客户在17:00
之前排上队,则即使办理业务时超过17:00
,也会被服务。
输出格式
输出平均等待时间(单位:分钟),结果保留一位小数。
注意,从到达银行至开始办理业务这一期间视为等待期间。
数据范围
1≤N≤1041≤N≤104,
1≤K≤1001≤K≤100
输入样例:
1 | 7 3 |
输出样例:
1 | 8.2 |
乒乓球
一个乒乓球俱乐部共有 KK 张乒乓球台,编号为 1∼K1∼K。
对于任意一对球员,当他们到达时如果有多个球台可用,那么他们就会被安排到编号较小的那个球台上打球。
如果所有球台都被占用了,他们就只能排队等待了。
假设每对球员最多只允许打两小时球。
你需要计算每个排队等候的人的等待时间以及每个球台当天有多少对球员在上面打球。
另外,让这个事情变得复杂的是,俱乐部为 VIP 球员保留了一些球台。
当一个 VIP 球台空出时,等待队伍中的第一对 VIP 球员将优先使用这个球台。
如果此时等待队伍中没有 VIP,则排在等待队伍的第一对球员可以使用这个球台。
另一方面,当轮到一对 VIP 球员打球时,如果没有 VIP 球台可用,那么他们将被视作普通球员处理。
补充:
1、当等待队伍中有 VIP 球员并且有空闲 VIP 球台时,必须优先分配 VIP 球员,并且必须分配他们 VIP 球台(优先分配编号较小的),直至 VIP 用户或 VIP 球台分配完为止。
2、期望打球时间超过两小时的,只能允许打两小时。
3、当多对球员的开始打球时间相同时,先输出到达时间早的球员的信息。
4、当等待球员中没有 VIP 时,VIP 球台视作普通球台处理,当可用球台中没有 VIP 球台时,VIP 球员视作普通球员处理。
输入格式
第一行包含整数 NN,表示共有 NN 对球员。
接下来 NN 行,每行包含两个时间以及一个 VIP 标识,HH:MM:SS
----到达时间,p
----打球时间(单位:分钟),tag
----如果是 11,说明这是一对 VIP,如果是 00,说明不是 VIP。
保证到达时间在 08:00:00
至 21:00:00
之间,这是俱乐部的营业时间。
保证每对球员的到达时间都不相同。
再一行包含两个整数 KK 和 MM,表示球台数量以及 VIP 球台数量。
最后一行包含 MM 个整数,表示 VIP 球台的编号。
输出格式
首先输出每对球员的到达时间,开始打球时间,等待时间。
每对球员的信息占一行,按开始打球时间从早到晚的顺序依次输出。
等待时间必须四舍五入为整数分钟。
如果一对球员在 21:00:00
之前(不包括 21:00:00
)不能得到一张球台,那么无需输出他们的信息。
再输出一行,KK 个整数,表示每个球台服务的球员对数。
数据范围
1≤N≤100001≤N≤10000,
1≤K≤1001≤K≤100,
0≤M≤K0≤M≤K
输入样例:
1 | 9 |
输出样例:
1 | 08:00:00 08:00:00 0 |
高精度
1002 A+B for Polynomials
给定两个多项式 AA 和 BB,计算 A+BA+B 的结果。
输入格式
共两行,每行包含一个多项式的信息,格式如下:
K N1 aN1 N2 aN2 … NK aNKK N1 aN1 N2 aN2 … NK aNK
其中,KK 表示多项式中非零项的数量,NiNi 和 aNiaNi 分别表示其中一个非零项的指数和系数。
输出格式
按照与输入相同的格式,输出 A+BA+B 的结果。
结果中的各项的系数均保留一位小数。
数据范围
KK 为整数,1≤K≤101≤K≤10。
NiNi 为整数,0≤NK<⋯<N2<N1≤10000≤NK<⋯<N2<N1≤1000。
aNiaNi 为浮点数,−100≤aNi≤100−100≤aNi≤100。
输入样例:
1 | 2 1 2.4 0 3.2 |
输出样例:
1 | 3 2 1.5 1 2.9 0 3.2 |
多项式乘
给定两个多项式 AA 和 BB,计算 A×BA×B 的结果。
输入格式
共两行,每行包含一个多项式的信息,格式如下:
K N1 aN1 N2 aN2 … NK aNKK N1 aN1 N2 aN2 … NK aNK
其中,KK 表示多项式中非零项的数量,NiNi 和 aNiaNi 分别表示其中一个非零项的指数和系数。
输出格式
按照与输入相同的格式,输出 A×BA×B 的结果。
结果中的各项的系数均保留一位小数。
数据范围
KK 为整数,1≤K≤101≤K≤10。
NiNi 为整数,0≤NK<⋯<N2<N1≤10000≤NK<⋯<N2<N1≤1000。
aNiaNi 为浮点数,−100≤aNi≤100−100≤aNi≤100。
输入样例:
1 | 2 1 2.4 0 3.2 |
输出样例:
1 | 3 3 3.6 2 6.0 1 1.6 |
趣味数字
请注意,数字 123456789123456789 是一个 99 位数字,完全由 11 到 99 组成,没有重复。
将其加倍,我们将获得 246913578246913578,它恰好是另一个 99 位数字,恰好由 11 到 99 组成,只是排列不同。
现在,给定你一个 kk 位的数字,请你判断将其加倍以后得到的数字是否可以由原数字的各数位重新排列得到。
输入格式
共一行,包含一个整数。
输出格式
输出共两行
如果原数字的各数位重新排列可以得到加倍后的数字,则在第一行输出 Yes
,否则输出 No
。
第二行,输出加倍后得到的数字。
数据范围
输入数字不超过 2020 位。
输入样例:
1 | 1234567899 |
输出样例:
1 | Yes |
回文数
如果一个数字从前往后读和从后往前读都一样,那么这个数字就是回文数字。
所有一位数字都是回文数字。
非回文数字可以通过一系列的操作与回文数字配对。
首先,将非回文数字反转,让反转后的数字与原数字相加,得到一个新的数字。
如果新的数字不是回文数字,那么就重复此操作,直到得到回文数字为止。
例如,我们从 6767 开始,经过两次操作可以得到一个回文数字:67+76=14367+76=143,143+341=484143+341=484。
对于给定的任意正整数 NN,请你找到它的配对回文数并输出得到该回文数需要的操作次数。
输入格式
共一行,包含两个整数 NN 和 KK,分别表示给定整数以及最大操作次数。
输出格式
共两行,第一行输出配对回文数。
第二行输出得到配对回文数所需要的操作次数。
如果经过 KK 次操作后,仍然无法得到回文数字。
那么,第一行输出 KK 次操作后得到的数字。
第二行输出 KK。
数据范围
1≤N≤10101≤N≤1010
1≤K≤1001≤K≤100
输入样例1:
1 | 67 3 |
输出样例1:
1 | 484 |
输入样例2:
1 | 69 3 |
输出样例2:
1 | 1353 |
进位制
进制
给定一对正整数,例如 66 和 110110,此等式 6=1106=110 是否成立?
答案是可以成立,当 66 是十进制数字,110110 是二进制数字时等式得到满足。
现在,给定一个正整数数对 N1,N2N1,N2,并给出其中一个数字的进制,请你求出另一个数字在什么进制下,两数相等成立。
输入格式
输入共一行,包含四个正整数,格式如下:
1 | N1 N2 tag radix |
N1N1 和 N2N2 是两个不超过 1010 位的数字,radix
是其中一个数字的进制,如果 tag
为 11,则 radix
是 N1N1 的进制,如果 tag
为 22,则则 radix
是 N2N2 的进制。
注意,一个数字的各个位上的数都不会超过它的进制,我们用 0∼90∼9 表示数字 0∼90∼9,用 a∼za∼z 表示 10∼3510∼35。
输出格式
输出使得 N1=N2N1=N2 成立的另一个数字的进制数。
如果等式不可能成立,则输出 Impossible
。
如果答案不唯一,则输出更小的进制数。
数据范围
2≤radix≤362≤radix≤36
输入样例1:
1 | 6 110 1 10 |
输出样例1:
1 | 2 |
输入样例2:
1 | 1 ab 1 2 |
输出样例2:
1 | Impossible |
可逆质数
给定两个整数 NN 和 DD,如果 NN 是一个质数,并且将 NN 转化为 DD 进制表示后,再进行反转,得到的新数字转化为十进制表示后如果也是一个质数,则称 NN 在 DD 进制系统中,是一个可逆质数。
例如,N=73,D=10N=73,D=10,则 7373 是质数,其十进制表示反转后为 3737 也是质数,所以 7373 在十进制系统中是一个可逆质数。
N=23,D=2N=23,D=2,则 2323 是质数,其二进制表示为 1011110111,反转后得到 1110111101,转化为十进制后为 2929,这也是一个质数,所以 2323 在二进制系统中是一个可逆质数。
现在,请你判断所给 NN 在 DD 进制系统中是否是一个可逆质数。
输入格式
输入包含多组测试数据。
每组数据共一行,包含两个整数 NN 和 DD。
当输入一行为一个负数时,表示输入停止。
输出格式
对于每组数据,输出一个结果,占一行。
如果所给 NN 在 DD 进制系统中是一个可逆质数,则输出 Yes
,否则输出 No
。
数据范围
1≤N<1051≤N<105,
1<D≤101<D≤10
输入样例:
1 | 73 10 |
输出样例:
1 | Yes |
火星颜色
火星人以与地球人相似的方式在计算机中表示颜色。
也就是说,颜色由 66 位数字表示,其中前 22 位数字代表红色(RR),中 22 位数字代表绿色(GG),后 22 位数字代表蓝色(BB)。
与我们的区别在于,他们使用 1313 进制(0∼90∼9 和 A∼CA∼C)来表示颜色值。
现在给定三个用来表示颜色值的十进制数字(数字范围在 [0,168][0,168] 之间),请你输出他们的火星 RGBRGB 颜色值。
输入格式
包含三个十进制整数,分别表示十进制下的 R、G、B 颜色值。
输出格式
共一行,先输出一个 “#”,然后输出一个 66 位数字表示火星 RGB 颜色值。
如果某一种颜色的数值换算为 1313 进制后,不足 22 位,则在前面补 00,凑足 22 位。
输入样例:
1 | 15 43 71 |
输出样例:
1 | #123456 |
样例解释
给定的三个数字 15,43,7115,43,71 在 1313 进制下的表示分别是 12,34,5612,34,56。
所以将它们组合起来,答案即为 #123456
。
火星数字
火星人用 1313 进制来计数:
zero
(零)在火星读作tret
。- 地球上的数字 1∼121∼12 在火星读作:
jan, feb, mar, apr, may, jun, jly, aug, sep, oct, nov, dec
。 - 对于进位后的 1212 个更高位数字,在火星读作:
tam, hel, maa, huh, tou, kes, hei, elo, syy, lok, mer, jou
。
例如,地球上的 2929 在火星读作 hel mar
,而火星数字 elo nov
表示的是地球上的数字 115115。
为了帮助两个星球上的人民之间相互交流,请你编写一个程序,能够实现地球和火星数字之间的相互翻译。
输入格式
第一行包含一个整数 NN,表示要翻译的数字个数。
接下来 NN 行,每行包含一个在 [0,169)[0,169) 范围内的数字,可能以地球形式给出,也可能以火星形式给出。
输出格式
共 NN 行,对于每个输入数字,用另一种语言在一行中输出对应的数字。
数据范围
1≤N≤1001≤N≤100
输入样例:
1 | 5 |
输出样例:
1 | hel mar |