PAT乙
大叔Daric
请大家多多指教
展开
-
PAT乙 1049 数列的片段和 (GO)
解题思路:这是一个数学题,找到规律就ok了N:个数;i:当前下标(从0开始)sum = value * (N - i) * (i + 1)循环计算一遍即可package mainimport ( "bufio" "fmt" "os" "strconv" "strings")func main() { var N int _, _ = fmt.Scanf("%d"...原创 2019-07-20 18:02:26 · 113 阅读 · 0 评论 -
PAT乙 1036 跟奥巴马一起编程 (GO)
PAT乙1036跟奥巴马一起编程有问题可以留言交流哈原创 2019-07-14 23:05:38 · 96 阅读 · 0 评论 -
PAT乙 1035 插入与归并 (GO)
思路:本题浪费了一点时间,和大家一样都以为是考察插入排序和归并排序,我就先把插入和归并排序都写好了。后来发现并不没有那么简单。理解插入排序和归并排序的特征插入排序是依次从数组中取一位,插入到前面的数组。插入排序在了解插入排序的基础上,我们可以循环已经排过序的数组,数组是否从小到大排序,直到a[i] > a[i+1],并且数组剩下的部分和原始数组一致,则可以判定为是插入排序,反之为归...原创 2019-07-14 23:00:44 · 145 阅读 · 0 评论 -
PAT乙 1034 有理数四则运算 (GO实现)
解题:本题没有什么难的点,看着有点吓人,感觉是代码量比较大。最初用GO写的时候,用bufio读入字符串,发现中间转换起来会非常耗时,期间一直有一个测试点一直超时,最初还以为是分子相乘时导致超过范围引起的,还特意写过一个大数相乘崩溃!!而且代码比较长,后来参考了一篇大神写的代码,给了我很大的启发,其实并不需要用字符串读入,按照正常的fmt.Scanf("%d/%d %d/%d")读入int即...原创 2019-06-21 16:13:43 · 167 阅读 · 0 评论 -
PAT乙 1033 旧键盘打字(GO实现)
解题思路:1.本题的难点应该是’+’,如果存在’+‘为坏键,则所有的大写字符都该过滤2.同样首先讲输入,用bufio读入防止超时,但是需要相应转换3.首先判断坏键,是否存在’+’,刚开始写的时候,感觉有个误区,字符’+‘和大写字符同为坏键时,我以为可能是由于’+‘坏了导致大写字母出不来并不代表’ie’键是坏的,这是错误的,我发现只要’IE’或者’ie’为坏键就表明’ie’键为坏键。4.遍历...原创 2019-05-29 16:24:49 · 149 阅读 · 0 评论 -
PAT乙 1032 挖掘机技术哪家强(GO实现)
解题思路:1.本题其实只需要定义一个数组,然后以学校编号为下标,存储对应的总分数即可2.go语言的话为了在输入不超时用bufio读入一个字符串,然后strings.Fields以空格拆分成字符串数组,之后strconv.Atoi转换成数字,按照对应下标与当前值相加即可。3.输入完毕其实已经计算完成了,这时只要求出最大值就好,最大值为分数,下标则未学校编号package mainimpo...原创 2019-05-29 15:24:41 · 122 阅读 · 0 评论 -
PAT乙 1031 查验身份证(GO实现)
解题思路:身份证18位,前17位根据给出的权重,求加权值,以加权值%11的模为下标,取对应的校验码。比较身份证的第18位,如果不同则放入输出数组。当然如果前17位中存在非数字也放入输出数组。最后只需要判断输出数组是否为空,空则all passed,不为空依次输出即可package mainimport ( "fmt")func main() { var N int var i...原创 2019-05-29 15:14:26 · 154 阅读 · 0 评论 -
PAT乙 1030 完美数列(GO实现)
本题思路简单,概括起来讲就是输入,排序,动态规划,输出1.输入部分,go如果用Scanf读入会超时,用bufio不会超时,但是在string转int时由于精读问题会出错2.排序没什么好讲的,一般都有封装的方法sort,当然自己排也没问题,但要注意效率3.这一部分是本题的关键点,其实就是在排序完的序列中,求最长的子序列满足M<=mp,我这里用pSum表示前一个最长的len,sum表示最长...原创 2019-05-29 14:31:42 · 126 阅读 · 0 评论 -
PAT乙 1027 打印沙漏 (GO语言)
找到规律,这题不难,有个坑点,*后面没有多余空格package mainimport ( "fmt")func main() { var n int var tag byte var sum, nextSum int _, _ = fmt.Scanf("%d %c", &n, &tag) sum = 1 nextSum = 1 i := 1 las...原创 2019-05-07 18:47:51 · 149 阅读 · 0 评论 -
PAT乙 1026 程序运行时间 (GO实现)
比较简单,go实现的话就是四舍五入的问题,(+0.5然后向下取整)package mainimport ( "fmt" "math")func main() { var C1,C2 float64 _, _ = fmt.Scanf("%f %f", &C1, &C2) result := int(math.Floor((C2 - C1)/100.0 + 0...原创 2019-05-07 18:44:45 · 102 阅读 · 0 评论 -
PAT 乙 1037 在霍格沃茨找零钱 (GO)
PAT 乙 1037 在霍格沃茨找零钱题目比较简单首先按照比例统一转换成最小单位纳特然后相减,得到找零或者还需多少再按照比例转换输出package mainimport ( "fmt" "math")func main() { var g1,g2,s1,s2,k1,k2 int _, _ = fmt.Scanf("%d.%d.%d %d.%d.%d", &g1...原创 2019-07-14 23:12:07 · 155 阅读 · 0 评论 -
PAT乙 1038 统计同成绩学生 (GO)
PAT乙 1038 统计同成绩学生(GO)思路:最简单的思路,百分制的分数,可以定义一个长度为100的数组,分数对应下标,读入一个分数,就在对应数组下标的数组中+1然后读入第二行,需要查询的个数和对应的分数,输出下标对应的值即可最后一个测试用例容易超时,所以建议用字符串读入,字符串读入如果依旧用int数组,那么字符串转整形也需要一段时间,所以用map性能会高于int数组package...原创 2019-07-15 00:01:20 · 111 阅读 · 0 评论 -
PAT乙 1039 到底买不买 (GO)
PAT乙 1039 到底买不买 (GO)思路:用字符串读入,转成字节数组循环把目标数组读入到map再一次循环小红想做的数组,把小红想要的颜色依次去map中匹配,看是否存在,不存在则缺少的变量++最后查看缺少的变量是否>0package mainimport ( "fmt")func main() { var s1,s2 string var lack in...原创 2019-07-15 00:09:02 · 95 阅读 · 0 评论 -
PAT乙 1048 数字加密 (GO)
解题思路:题目意思比较简单,从后往前,根据当前个数的奇偶数来分别计算这时就会有个问题,2个字符串长度问题,这里有个坑,只有等到2个字符串都循环到最后一位才停止,中间有一个字符串长度不够了,用0来补上package mainimport "fmt"func main() { var A, B string var result []int _, _ = fmt.Scanf(...原创 2019-07-20 17:58:09 · 170 阅读 · 0 评论 -
PAT乙 1047 编程团体赛 (GO)
解题思路:比较简单,如果用数组下标来表示的话,数组长度要注意。简单点就用map吧package mainimport ( "fmt")func main() { var n int var group, number, score int var result map[int]int _, _ = fmt.Scanf("%d", &n) result = m...原创 2019-07-20 17:52:31 · 130 阅读 · 0 评论 -
PAT乙 1046 划拳(GO)
package mainimport ( "fmt")func main() { var n int jWin, yWin := 0, 0 var number [4]int _, _ = fmt.Scanf("%d", &n) for i:=0; i<n; i++ { _, _ = fmt.Scanf("%d%d%d%d", &number[...原创 2019-07-20 17:44:17 · 1024 阅读 · 0 评论 -
PAT乙 1045 快速排序 (GO)
PAT乙 1045 快速排序 (GO)解题思路:暴力搜索肯定是不行的,对于go的话用scanf会超时,这里我先读入一行字符串然后转成整型数组主元就是比左边的大,比右边的小,而且排序后位置不变经过一轮排序,当前位置的数字如果和排序后的数字一样,并且比前面所有的数都大提供几个测试用例供大家参考:91 3 5 2 4 6 9 8 721 691 2 3 6 5 8 7 4 9...原创 2019-07-20 17:42:13 · 131 阅读 · 0 评论 -
PAT乙 1044 火星数字 (GO)
1044 火星数字解题思路:本题有2类输入输出,输入火星文输出地球文,输入地球文输出火星文判断输入的是哪一类文字,这个位置我是根据GO语言中的方法来判断的1)strings.Fields把读入的字符串按照空格分隔成字符串数组2)strconv.Atoi 把字符串转成数字如果字符串数组>0并且数组的第一个值无法转成整形则为火星文,反之地球文测试点2,4需要注意存在高位和地位,当...原创 2019-07-15 16:16:43 · 160 阅读 · 0 评论 -
PAT乙 1043 输出PATest (GO)
1043 输出PATest解题思路:package mainimport ( "bufio" "fmt" "os")func main() { var number [6]int var chars = [6]byte{'P', 'A', 'T', 'e', 's', 't'} var inputReader *bufio.Reader inputReader = ...原创 2019-07-15 16:09:07 · 120 阅读 · 0 评论 -
PAT乙 1042 字符统计(GO)
package mainimport ( "bufio" "fmt" "os")func main() { var flag map[byte]int var maxByte byte var inputReader *bufio.Reader inputReader = bufio.NewReader(os.Stdin) flag = make(map[byte]i...原创 2019-07-15 16:05:32 · 116 阅读 · 0 评论 -
PAT 乙 1041 考试座位号 (GO)
package mainimport ( "fmt")type Student struct { id string seat int examSeat int}type Students []Studentfunc main() { var s Students var n, m int var id string var seat, examSeat i...原创 2019-07-15 16:03:48 · 87 阅读 · 0 评论 -
PAT乙 1040 有几个PAT (GO)
PAT乙 1040 有几个PAT (GO)解题思路:先一次循环找出T的数量再次遍历,记录P的数量,如果中间出现了A,那么这时候能够组成PAT的数量为A前面的P*末尾的T,如果出现T则T=T-1package mainimport ( "bufio" "fmt" "os")func main() { var countT, countP int var result...原创 2019-07-15 16:01:20 · 140 阅读 · 0 评论 -
PAT乙 1025 反转链表 (GO语言)
解题思路:这题花的时间最久,起初没有什么思路,一直在考虑链表的反转问题,还有递归什么的,感觉反而把问题想复杂了,还是直接用数组来模拟最简单。测试点5超时问题,如果用go实现,用bufio读入测试点6,应该是输入的节点数据,有的并不是链表数据,也就是说真的链表长度和输入的N可能不一致1.输入数据,用map[Address] = node。就是用map保存节点数据,以节点地址作为key2.用...原创 2019-05-07 18:38:38 · 155 阅读 · 0 评论 -
PAT乙 1029 旧键盘 (GO实现)
定义map用来标记真实的输入,key用来存储字符,然后循环期望的输入,如果期望输入中的字符没有在真实输入中标记出来则为坏键。这里需要注意的是字母输出都为大写package mainimport ( "bufio" "fmt" "os")func main() { var flag map[byte]int var printFlag map[byte]int var i...原创 2019-05-08 21:10:22 · 106 阅读 · 0 评论 -
PAT乙 1028 人口普查 (GO语言)
解题思路:第3个测试点错误,这个比较坑,存在所有的输入都是不符合,有效个数为0,直接输出0即可1.直接用字符串比较,不需要把后面的字符串再拆分成年月日2.因为这题有时间区间,首先定义最年轻的1814/09/06,最年长的2014/09/063.接下去,每一次输入都比较一下,合适的就替换年轻/年长。4.GO实现需要用bufio输入,不会超时package mainimport ( ...原创 2019-05-08 19:13:33 · 147 阅读 · 0 评论 -
PAT乙 1011 A+B 和 C (GO实现)
直接贴代码package mainimport "fmt"func main() { var n int var a,b,c int32 var res bool fmt.Scanf("%d", &n) for i:=0; i<n; i++ { fmt.Scanf("%d%d%d", &a, &b, &c) if a + b > ...原创 2019-03-31 17:34:34 · 122 阅读 · 0 评论 -
PAT乙 1010 一元多项式求导(GO实现)
解题思路:这道题由于没有告诉我们何时输入结束,所以可以循环成对的输出,就是输入系数和指数直接计算然后输出,直到结束。因为用GO实现,可以读入字符串,然后转换为字符串切片,我就直接接收所有输入,然后统一输出了。1.需要考虑是否是第一组输出2.由于指数是递减输入的,所以到指数为1的时候,其实计算完就可以结束了,因为后面指数肯定为03.提供几组测试数据吧:输入:3 3 2 2 1 1 //正常...原创 2019-03-31 17:22:00 · 158 阅读 · 0 评论 -
PAT 乙 1006 换个格式输出整数(GO实现)
这题比较简单,需要考虑的应该就是如何输出吧package mainimport ( "fmt")func main() { var n, i int var number [3]int fmt.Scanf("%d", &n) for i=2; n>9; i-- { number[i] = n % 10 n = (n - number[i]) / 10 }...原创 2019-03-24 17:49:59 · 100 阅读 · 0 评论 -
PAT乙 1005 继续(3n+1)猜想(GO实现)
题目大家都有这里就不再复制了我的解题思路:1.一个标识数组flag[100],初始化数组值都为0,用来标识被覆盖的数。2.输入的值,经过卡拉兹(Callatz)猜想的计算,然后把对应的标识位置为13.由于100以内的数组也可能计算出>100的中间值,这里把计算出来>100的值过滤,避免数组越界4.结合标识数组,进行循环,如果标识位为1的把值去除,剩下的就关键数package...原创 2019-03-24 17:43:05 · 106 阅读 · 0 评论 -
PAT(乙)1009 说反话(GO实现)
解题:本题比较简单,用GO实现的话,主要是2个点1.如果接收包含空格的字符串,因为Scanf遇到空格会停止。用bufio读入2.拆分字符串strings.Fieldspackage mainimport ( "bufio" "fmt" "os" "strings")func main() { var inputReader *bufio.Reader inputRea...原创 2019-03-31 14:48:20 · 104 阅读 · 0 评论 -
GO刷题PAT乙1004 成绩排名
读入 n(>0)名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。输入格式:每个测试输入包含 1 个测试用例,格式为第 1 行:正整数 n第 2 行:第 1 个学生的姓名 学号 成绩第 3 行:第 2 个学生的姓名 学号 成绩 ... ... ...第 n+1 行:第 n 个学生的姓名 学号 成绩其中姓名和学号均为不超过 10 个字符的字符串,成绩为 ...原创 2019-03-24 14:39:16 · 110 阅读 · 0 评论 -
GO刷题PAT乙1002 写出这个数
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。输入格式:每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10100。输出格式:在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。输入样例1234567890987654321123456789输出样例yi san wu我的解...原创 2019-03-23 18:21:55 · 258 阅读 · 0 评论 -
PAT乙1001 害死人不偿命的(3n+1)猜想 Go实现
害死人不偿命的(3n+1)猜想对任何一个正整数 n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把 (3n+1) 砍掉一半。这样一直反复砍下去,最后一定在某一步得到 n=1。卡拉兹在 1950 年的世界数学家大会上公布了这个猜想,传说当时耶鲁大学师生齐动员,拼命想证明这个貌似很傻很天真的命题,结果闹得学生们无心学业,一心只证 (3n+1),以至于有人说这是一个阴谋,卡拉兹是在蓄意延缓美国数...原创 2019-03-23 16:47:17 · 153 阅读 · 0 评论 -
PAT(乙)1013 数素数(GO实现)
解题思路:1.知道素数是什么2.写了一个判断素数的方法3.按需计算素数,循环计算到满足需要的素数个数后break4.下面就是输出格式问题了package mainimport ( "fmt" "math")func main() { var n,m int var number [10000]int fmt.Scanf("%d%d", &n, &m)...原创 2019-04-03 23:18:57 · 91 阅读 · 0 评论 -
PAT乙 1012 数字分类(GO实现)
没什么好写的,emmmmpackage mainimport "fmt"func main() { var n,m int var a1,a2,a5 = 0,0,0 var a4 = 0.0 var count1,count2,count3,count4,count5 = 0,0,0,0,0 fmt.Scanf("%d", &n) for i:=0; i<n...原创 2019-03-31 23:17:34 · 98 阅读 · 0 评论 -
PAT乙 1014 福尔摩斯的约会 (GO实现)
解题思路:前面2组字符串1.第1对相同的大写英文字母(A-G,我开始以为是A-Z然后%7取余,发现没意义,测试点好像也就只有A-G)2.第 2 对相同的字符(0-9,A-N)3.用flag作为标记位,标记第1,2个字符串比较时的第一次字符相等后面2组字符串1.第 1 对相同的英文字母 (a-z,A-Z)package mainimport "fmt"func main() {...原创 2019-04-13 12:54:57 · 134 阅读 · 2 评论 -
PAT乙 1020 月饼(GO实现)
解题思路:1.获取每个商品的单价2.按照单价排序3.先满足单价最高的,依次递减。直到需要的数量被填满,或者所有商品的库存为0package mainimport ( "fmt" "sort")type Product struct { stock float64 price float64 average float64}type Products []Produc...原创 2019-05-03 22:24:37 · 125 阅读 · 0 评论 -
PAT乙 1019 数字黑洞 (GO)
解题思路:输入一个4位数1.分解4位整数变成一个数组2.排序(无论顺序还是倒序)3.这里限制了4位整数,所以比较简单,直接计算最大,最小数4.计算后判断是否为0或者6174package mainimport ( "fmt")func main() { var n int _, _ = fmt.Scanf("%d", &n) for true { var ...原创 2019-04-29 22:49:44 · 107 阅读 · 0 评论 -
PAT乙 1018 锤子剪刀布 (GO实现)
解题思路:1.由于超时问题,把scanf替换成bufio2.定义2个数组,下标0,1,2分别表示用’B’,‘C’,'J’赢的次数,这样输出的时候就不用考虑默认B的情况了3.定义win,lose,same变量,win和lose相个反就是对方的赢输次数package mainimport ( "bufio" "fmt" "os")func main() { var n i...原创 2019-04-29 00:05:40 · 191 阅读 · 0 评论 -
PAT乙 1017 A除以B (GO实现)
解题思路:1.首先考虑只有一位的情况2.多位数的时候,被除数如果小于除数,向后借位的时候,要考虑补0,我这边时候都考虑了补0,包括第一位如果小除数的情况,后面输出的时候再做判断,把前面不需要的0过滤掉package mainimport ( "fmt")func main() { var str string var n int fmt.Scanf("%s%d", &a...原创 2019-04-28 23:56:29 · 118 阅读 · 0 评论