PAT_甲级_1078 Hashing

2020-10-30
阅读 3 分钟
1k
给出散列表长MSize和欲插入的元素,将这些元素按读入的顺序插入散列表中,其中散列函数为H(key)= key %MSize,解决冲突采用只往正向增加的次探查法(即二次方 探查法)。另外,如果题目给出的MSize不是素数,那么需要将MSize重新赋值为第一个比MSize大的素数再进行元素插入。

PAT_甲级_1015 Reversible Primes

2020-10-29
阅读 2 分钟
1.2k
对于输入的每一个数字N,如果是负数退出循环,否则输入进制D,先判断N是否是素数,如果不是就直接输出false并且进行下一次输入,否则就将N在D进制下逆置并且转化为10进制数reversedN,然后再判断reversedN是否为素数,如果是输出Yes,否则输出No.判断一个数字N是否为素数的方法如下:

PAT_甲级_1088 Rational Arithmetic

2020-10-28
阅读 5 分钟
868
算法思路:此题和1081思路是一样的,不过需要写出四则运算,具体步骤如下:1.分数采用Fraction结构体存储,这里要求数据得是long long型2.gcd函数求解两数的最大公约数,目的是为了后面的化简操作 3.分数的化简:满足2个原则

PAT_甲级_1081 Rational Sum

2020-10-27
阅读 3 分钟
1k
直接模拟数学上的分数相加,过程如下:1.分数采用Fraction结构体存储,这里要求数据得是long long型2.gcd函数求解两数的最大公约数,目的是为了后面的化简操作,相应代码如下:

PAT_甲级_1049 Counting Ones

2020-10-26
阅读 2 分钟
917
我们计算末尾有多少个数是覆盖了1的,那么末尾为1的时候前面是只能取0~3070,因为如果取3071,那么就是30711>30710了,共有3071种选择

PAT_甲级_1008 Elevator

2020-10-26
阅读 1 分钟
1k
有一部电梯,最开始停在第0层,上一层楼需要6s,下二层楼需要4s, 每次到达当前目的楼层还需要停留5s。现给出电梯要去的楼层的顺序,求总共需要花费多少时间(最后不需要回到第0层)。

PAT_甲级_1104 Sum of Number Segments

2020-10-23
阅读 1 分钟
1k
1、使用双层循环测试点2和3会超时。2、测试点2数据太大,使用double会出错,得换成long double,2020年5月前不会出错,应该是新添加的数据点

PAT_甲级_1069 The Black Hole of Numbers

2020-10-23
阅读 2 分钟
1.3k
给定任意一个各位数字不完全相同的四位正整数,如果先把四个数字按非递增排序,再按非递减排序,然后用第一个数字减第二个数字,将得到一个新的数字。重复这一操作,很快会停在有“数字黑洞”之称的6174,这个神奇的数字也叫Kaprekar常数。

PAT_甲级_1101 Quick Sort

2020-10-22
阅读 2 分钟
1.1k
本题输入一个序列,包含N个正整数,如果一个数左边的所有数都比它小、右边的所有数都比它大,那么称这个数为序列的一个pivot。求序列中pivot的个数。

PAT_甲级_1093 Count PAT's

2020-10-22
阅读 2 分钟
1k
对一个确定位置的A来说,以它形成的PAT的个数等于它左边P的些个数乘以它右边T的个数。例如对字符申APPAPT的中间那个A来说,它左边有两个P,右边有一个T,因此这个A能形成的PAT的个数就是2x1=2.于是问题就转换为:对字符串中的每个A,计算它左边P的个数与它右边T的个数的乘积,然后把所有A的这个乘积相加,最后的结果就是该...

PAT_甲级_1029 Median

2020-10-20
阅读 3 分钟
904
本来想着暴力求解看看可以得多少分,没想到通过了。直接使用一个数组a存储所有输入的元素,然后使用sort排序函数进行排序,然后计算中位数的位置pos,在M+N为偶数的时候为(M+N)/2-1,在M+N为奇数的时候为(M+N)/2,统一起来就是(M+N)/2+(M+N)%2-1。输出a[pos]就结束了。此题甚至都不需要使用long long 来存储数据.

PAT_甲级_1089 Insert or Merge

2020-10-20
阅读 3 分钟
1.1k
给出一一个初始序列,可以将它使用插入排序或归并排序进行排序。现在给出一个序列,问它是由插入排序还是归并排序产生的,并输出下一步将会产生的序列。

PAT_甲级_1010 Radix

2020-10-19
阅读 3 分钟
1.4k
输入四个整数N1、N2、tag、radix。其中tag--1表示N1为radix进制数,tag--2表示N2为radix进制数。范围:N1和N2均不超过10个数位,且每个数位均为0-9或a~z,其中0~9表示数字0~9、a~z表示数字10-35.求N1和N2中未知进制的那个数是否存在,并满足某个进制时和另一个数在十进制下相等的条件。若存在,则输出满足条件的最小进制:...

PAT_甲级_1044 Shopping in Mars

2020-10-19
阅读 2 分钟
1.1k
给定一个序列和一个m的值,要求分割字符串让其和等于M,如果有多个按照i的顺序输出下标i-j,如果没有使得分割的字符串的和等于M,那么找到最接近m的字符串分割,如果有多个按照i的从小到大输出下标i-j

PAT_甲级_1085 Perfect Sequence

2020-10-16
阅读 3 分钟
1.1k
从N个正整数中选择若干个数字组成一个序列,最大值为M,最小值为m,那么该序列中的数字,也就是从m到M的数字一定是原序列中的连续序列,因为不然就会存在一个数字大于m小于M不在选择的序列中,然后将其加入到该序列使其长度变大并且符合题意,那么原来选出的序列就不是最长的了。所以我们一定是在一个有序序列中选出一个...

PAT_甲级_1038 Recover the Smallest Number

2020-10-15
阅读 1 分钟
1.1k
这个题要求一堆数字串拼接获得最小的数字,那么对于其局部问题就是有2个数字串,如何拼接使其最小,答案就是先将其2种可能拼接出来比较其大小即可,而数字的大小其实和转化为字符串的大小比较是一致的,而且对于拼接操作指的基本上就是字符串操作。那么也即是对于这样一堆数字串转为字符串,然后对于任意2个字符串a和b的...

PAT_甲级_1067 Sort with Swap(0, i)

2020-10-15
阅读 2 分钟
1.2k
根据题目给出的交换例子,仔细观察可以知道其交换策略为:如果数字0当前在i号位,则找到数字i当前所处的位置,然后把0与i进行交换。但是仔细思考发现如果数字0在0位置就无法继续执行下去,所以对于该策略,需要对于数字0在位置0上进行特判,将数字0与序列中任意一个不在本位上的数字进行交换,这样策略就可以继续进行下...

PAT_甲级_1037 Magic Coupon

2020-10-15
阅读 2 分钟
1.2k
很直观的感受就是将2个集合中正数大的依次相乘,负数小的依次相乘然后再相加。对这2个集合都从小到大进行排序,那么从左往右将相同位置的负数进行相乘,然后从右往左将相同位置的正数进行相乘,并且将其成绩累加就是最终结果。

PAT_甲级_1033 To Fill or Not to Fill

2020-10-14
阅读 7 分钟
1.6k
已知起点与终点的距离为D,油箱的最大油量为Cmax,单位汽油能够支持前进Davg。给定N个加油站的单位油价和离起点的距离C所有加油站都在一条线上),汽车初始时刻处于起点位置,油箱为空,且可以在任意加油站购买任意量的汽油(前提是不超过油箱容量),求从起点到终点的最小花费。如果无法到达终点,则输出能够行驶的最远距离。

PAT_甲级_1070 Mooncake

2020-10-14
阅读 2 分钟
1.5k
此题是使用贪心的思想来求解,一般为了获得最大收益,会首先将售价最高的月饼尽可能多的销售出去,因为在需求量一定的情况下,单价高的月饼总售价也会更高,所以我们对所有的月饼按照其单价从高到低进行排序,然后依次遍历所有的月饼,如果当前月饼的数量小于等于需求量,那么就全部售出并计算收益和更新需求量,否则就...

PAT_甲级_1048 Find Coins

2020-10-13
阅读 3 分钟
958
使用hash散列的思想来处理每一个输入的数字,nums来记录每一个数字出现的次数,下标为数字,其值为出现次数。那么我们从0开始遍历一直到1000,对于每一个数字j,首先得判断j和M-j出现的次数是否都不为0,如果是,对于所有j!=M-j(两数字不相等)或者j==M-j并且nums[j]>1(两数字相等但是出现了至少2次),就输出j和M-j,并...

PAT_甲级_1050 String Subtraction

2020-10-13
阅读 1 分钟
1.1k
s1和s2分别记录第一和第二个字符串,使用table记录所有在s2中出现过的字符,在遍历s1的过程中,只要当前字符在table中没有被记录就输出即可。

PAT_甲级_1092 To Buy or Not to Buy

2020-10-13
阅读 2 分钟
1k
给出两串珠子中每颗珠子的颜色,问第一串中是否有第二串中的所有珠子,即对每种颜色来说,第一串中该颜色珠子的个数必须不小于第二串中该颜色珠子的个数。如果是,输出“Yes"”,并输出第一串中除了用来和第二串珠子进行匹配以外,还剩多少珠子:如果不是,则输出“No",并输出第串中还少多少个珠子,才能让第一串拥有第二串...

PAT_甲级_1084 Broken Keyboard

2020-10-13
阅读 1 分钟
924
我们可以使用notBroken记录哪些字符是好的键,在输入s1和s2的时候,首先变量s2,将s2的字符全部记录为好键,notBroken[s2[i]] = true,然后遍历s1,对于在notBroken中显示s1的字符不是好键的就进行输出,但是由于只输出一次,所以在输出完毕后,就将其记录为好键。

PAT_甲级_1082 Read Number in Chinese

2020-10-12
阅读 7 分钟
1.5k
此题考察的细节主要在ling和Wan的输出上,由于只有9位,那么最高位只会到达亿。那么首先使用units数组存放每一位数字的单位(从个、十、百到亿),由于万,十万,百万,千万的单位每一个都有万字,但是在输出的时候只有该组数位中不为0的数字对应的最小单位才会带上万输出,所以,这里在units[4]存储Wan,其他位只存储十,...

PAT_甲级_1041 Be Unique

2020-10-12
阅读 1 分钟
987
此题主要使用hash的思想,将出现的数字作为下标,出现的次数作为值,然后一一对应,在输入的时候,使用num数组接受所有的值,count数组保存所有值所出现的次数,因为最大数字为10000,所以count数组得开10001以上,然后使用j指针遍历数组num,如果count[num[j]]==1,说明按照读入的顺序有一个只出现了一次的数字,将其输出...

PAT_甲级_1077 Kuchiguse

2020-10-10
阅读 1 分钟
949
求字符串的公共后缀就得想到从后往前进行遍历相同的字符了,为此使用n记录三个字符串的最小长度,作为遍历的最大长度,然后使用i,j,k分别作为s1,s2,s3的下标指针,只要s1[i]==s2[j]&&s1[i]==s3[k]就说明当前字符为公共字符,添加到结果字符串r中,然后--i,--j,--k,否则就直接break退出循环。退出循环后,直接逆...

PAT_甲级_1035 Password

2020-10-10
阅读 2 分钟
1.1k
给定n个人的用户名和密码,按照要求替换密码中的特定字符(1 (one) by @, 0 (zero) by %, l by L, and O by o),如果不存在需要修改的密码,则需要根据单复数输出There is(are) 1(n) account(s) and no account is modified

PAT_甲级_1005 Spell It Right

2020-10-10
阅读 1 分钟
1k
由于整数大小最大为10^100,得用string存储才行,对string中的每一位减去'0'后进行求和,然后再转化为string,从左往右依次输出对应每一位的英文字母,为了方便对最终结果的每一位进行输出建立从数字到英文单词的映射numToWords,下标表示每一位数字,其值代表对应的英文单词。

PAT_甲级_1001 A+B Format

2020-10-10
阅读 2 分钟
1.5k
首先计算a+b的值c,对于负数先输出负号,然后对结果取绝对值,使用string r存储最后输出的结果,将c的每一位逆序添加到r中,并且每添加3位就添加一个逗号(使用index来标记添加位数),这里得特判c==0的情况,直接输出0,最后将r逆序输出即可。