自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

原创 [Algorithm]: Algs4-预备单元作业

算法学习: Algs4-预备单元作业作业代码没什么需要多说的,主要记录一下java命令行编译的那些事。1. IDE运行:运行平台是IntelliJ 2021.2.1版本。 需要命令行参数的话,不是像作业网站上说的那样 command + E (对于Mac)。实际上右上角点进去,选择Edit Configurations。在名为Program arguments的那一栏填进去就可以。2. Java命令行编译与运行:这部分主要以第三个问题RandomWord的代码为例。这部分内容是在Windows

2021-08-26 22:18:06 652 1

原创 PAT A 1103 动态规划解法

题记写这篇博客主要也是看到网上大部分解法都是采用DFS,说实话写这题时我也考虑过DFS,但还是担心会超时,因为不仅是一个值加入不加入这两种选择,它还可能被多次加入,其复杂度比单纯的指数还要高。但后来写完看看网上人家的解法,发现DFS还是能过的,最复杂的点时间大概在300ms左右,看起来裕度也还不错。不过采取动态规划解法,最长时间在十几ms,可见其时间复杂度上还是具有明显的优势。抛开的DFS的捷径,接下来就只能冷静下来仔细分析如何优化我们的算法了。基本思路对几个记号的意义进行声明:VVV :题目

2020-07-23 20:48:27 140

原创 [PAT Basic Level] 1090~1095

1090. 危险品装箱题目分析:这里有一个问题需要好好注意,从给的样例可以看到,可能一个物品与2种不同的物品都会配对成为危险品,所以这里比较好的策略是开一个比较大的数组,以下标表示物品编号,储存的值表示配对的危险品编号,例如:20005与20001是危险品,20006,20005构成危险品,则Arr[2005]=20001,Arr[20006]=20005。源代码#include <...

2020-03-26 20:04:12 110

原创 [PAT Basic Level] 1085~1089

1085. PAT单位排行题目分析:这道题某些思想和1080很像,为了快速查找相同学校,我们可以先对整个数组进行排序,按学校的校名字典序升序排序,这样相同的校名就会在一起,就可以方便地统计人数以及总分。这里我的代码可能看起来有些绕,因为最开始有两个点超时了,放下了过了几天才回头改,有些变量名很相似,不容易区分。源代码#include <cstdio>#include <...

2020-03-26 19:24:08 92

原创 [PAT Basic Level] 1080~1084

1080. MOOC期终成绩题目分析:这道题目,主要需要考虑清楚如何高效迅速地计算完成,明确快速查照的方法。有以下几个方面可以注意来提高计算速度:仅当编程成绩大于等于200时,采可能及格,所以小于200的不用保存,减少之后查找匹配学号时的数组大小。在统计期中、期末成绩时,需要对学号进行匹配,那么就需要在前面的列表里查找,如果遍历的话整体时间复杂度就太高了,这里需要采用二分查找,为此需要首...

2020-03-26 18:49:07 100

原创 [PAT Basic Level] 1074~1079

1074. 宇宙无敌加法器题目分析:解决这道题主要需要考虑好如何对给定进制进行合理求解加法。由于长度不固定,而且是对位进行加减法,可以考虑用string类来储存,而且计算时可以方便的对位进行扩展。有一个需要注意的地方是,对于进位需要考虑好,尤其是最高位相加可能导致结果位数比加数多一位。在计算加法时,需要从最低位开始算起(因为要考虑低位的进位),所以可以先把数组逆置,然后再从低到高逐位计算。...

2020-03-21 15:11:08 75

原创 [PAT Basic Level] 1069~1073

1069. 微博转发抽奖题目分析:这题主要还是对一些题目条件的合理适配,涉及到不少字符而且都占一整行,用string类可以快速读取和操作,而且string类内置了比较判断以及赋值运算符的重载,都比较方便,然后这道题给的时间范围也比较宽裕,按规定一步步算也不会超时,所以踏实把代码实现好就可以。源代码#include <iostream>#include <string&g...

2020-03-19 13:31:17 87

原创 [PAT Basic Level] 1065~1067

1065. 单身狗题目分析:题目稍微有些繁琐,但思路不难。为了快速查看该客人是否在伴侣列表中,这里建议开一个大小为100000的int数组,以客人的ID作为数组的下标这样采用数组随机访问的方式达到O(1)O(1)O(1)的查找速度。然后根据输入的伴侣信息,数组中存储当前ID对应的伴侣ID。在判定是否落单时,只需要判定该客人的ID是否在伴侣列表中以及如果在的话其伴侣是否也在当前参加派对列表中。...

2020-03-18 15:40:36 65

原创 [PAT Basic Level] 1059~1064

1059. C语言竞赛题目分析:这题涉及到的一些思想前面都出现过不止一次,主要需要考虑好查询名次的方法,由于编号给的无序,每次都遍历数组去查询是否存在和名次就很慢了,达到O(n2)O(n^2)O(n2)的复杂度,不过的数据范围也不是很大10410^4104,可能差不多也能达到时间要求,但这里最好还是借鉴桶排序的思想,开一个10510^5105大小的数组,直接以编号作为下标,可以实现在O(1)O...

2020-03-17 14:00:33 73

原创 [PAT Basic Level] 1053~1057

1053. 住房空置率题目分析:实现起来不算太复杂的一道题,不过要认真审题,弄明白题目的意思。分别读取记录好用电量的阈值以及观察期的阈值,用一个变量count统计某户用电低于阈值的天数。然后对每一户依次进行的数据读取,如果某一天的用电量低于用电阈值就把天数+1,这样统计出该户用电少于阈值的天数,如果小于一半,再比较观察的天数是否超过了天数的阈值(注意是观察天数而不是用电量低于阈值天数),来判...

2020-03-15 14:24:22 96

原创 [PAT Basic Level] 1050~1052

1050. 螺旋矩阵题目分析:为了输出螺旋矩阵,首先得把数据读入一个数组,然后按非升序排好序,接下来我们创建一个二维数组来表示这个元素,到时候相应输出即可。题目的难点也就是根据螺旋矩阵的特点来对这个二维数组合理赋值方便我们输出。这个干说好像有些难抽象。画个简单的示意图吧:上图表示了我们对螺旋矩阵最外层的一个划分,这里我没有说明行列的数目怎么确定,这个不难,就不赘述了。箭头表示的是螺旋矩阵...

2020-03-14 16:07:37 96

原创 [PAT Basic Level] 1045~1049

1045. 快速排序题目分析:这道题很有意思,我还是天真了一些,一开始的想法是:我先对这个序列进行排序,然后对排过序的序列与原始序列比较,那么只要发现两个数组中位置相同的元素值相同,那就发现了一个主元素,因为显然排过序的左边值都小于当前值,右边大于当前值,那么说明这个元素就在它按主元素划分后该在的位置。但是,我想的太简单了!!!这也是我看了网上人家的分析才意识到。感谢博主DoctorLDQ的...

2020-03-13 16:30:45 103

原创 [PAT Basic Level]1041~1044

1041. 考试座位号题目分析:这题比较容易,为了方便查询,我还是借鉴了桶排序的思想,首先用一个结构体来存储id、试机座位号以及考试座位好,然后建一个数组,用试机座位号作为该元素对应在数组中的下标。其他的就不赘述了,数据也没坑,仔细注意自己的代码逻辑漏洞即可。源代码#include <stdio.h>#include <cstring>typedef struc...

2020-03-13 13:44:24 71

原创 [PAT Basic Level] 1036~1040

经历了1035惨痛的折磨,终于迎来一段比较轻松的编程问题,所以今天一次性刷的多些,撸了9道,把昨天落下的补回来。1036. 和奥巴马一起编程题目分析:按照题目条件输出就好,主要需要考虑的就是四舍五入对边长求解一下,以及中间那些需要空格的部分。空格建议采用printf函数带*的格式来解决,具体形式是:printf("%*d",width,number),星号的内容会由整形变量number前...

2020-03-13 00:37:03 325

原创 [PAT Basic Level] 1035. 插入与归并

题目分析:这道题目,花了不少时间,犯了一个很窒息也让我查了很久很才发现的错误——把Insertion Sort输出成了Insert Sort。。。写这道题的分析时,身心俱疲。中途因为查不出错,借鉴了网上的一些代码并相应地修改了,所以和网上很多其他人代码比较相似。这道题目从0~6一共7个测点,0、2、4是插入排序测点,其余是归并排序测点(看看我的错误想必就能明白为何我知道这些测点的情况了。。)...

2020-03-11 22:06:19 133

原创 [PAT Basic Level]1034.有理数四则运算

题目分析:这道题到目前为止,应该是编写的最麻烦的一个题了,实在没想到什么比较好的思路,写完了之后在网上也找了一圈,找了一个写的我觉得最好的,思路也差不多,不过实现起来,别人的代码还是简洁了很多,但是我感觉自己的代码看起来相对可能好理解一些?自恋一下。不过把人家的代码贴在后面做一个比较吧,现在自己写的代码肯定还是非常粗糙的,日子还长,希望能早些进步向诸位大神们靠近。首先强调几个重要的需要注意的地...

2020-03-10 00:04:38 97

原创 [PAT Basic Level] 1029~1033

1029. 旧键盘题目分析:主要问题就是判断哪些字符原来有现在没有了。可以用两个数组(或者向量、string之类)存好两个字符串后,从头开始比较,直到遍历完实际输出。每当遇到字符不同,就说明遇到了坏键,这时候判断一下是否前面已经遇到过了。然后保持指示实际文本位置的变量不变,原始文本往后查找直到找到相同字符。另外需要注意一下,在遇到字母的时候,先用toupper()统一转换成大写比较方便,一个...

2020-03-08 22:42:15 76

原创 [PAT Basic Level] 1023~1028

1023. 组个最小数题目分析:这道题没有遇到需要额外注意的坑。要求组成的数字尽量小,那么第一位应该是非0的且出现过的最小数字,之后再从0开始,若该位出现次数不为0,则输出,一直遍历到9。编程的时候有个地方要注意,输出了最高位之后,要记得把储存该位数字出现的次数相应减1。源代码#include <stdio.h>int main(){ int digit[10]...

2020-03-07 16:33:40 82

原创 [PAT Basic Level] 1018~1022

1018.锤子剪刀布题目分析:乍看起来还是比较容易,不过实现起来还是有一些麻烦。这一题没有什么坑点需要额外注意,仔细编写程序即可。为了相对简便地判断胜负关系,首先判断两字符是否相等,若相等则直接将平局数量加一;否则需要根据情况进行判断。这里我没有用switch,这样的话对各种情况进行判断难免导致代码冗长。为了方便地判断胜负,编写了一个函数,输入一个字符,返回其能赢的字符,那么只需要比较另...

2020-03-06 14:59:32 129

原创 [PAT Basic Level]1014、1015、1016、1017

1014. 福尔摩斯的约会题目分析这道题主要难度地方在于把题目的意思理解明白。题干有些长,叙述也有些绕,需要耐心仔细。总结起来,需要满足下面几个条件:日期判定:前两个字符串中第一对相同的大写英文字母,此外由于日期只有7天,按题目中的方法,必须满足大写字母是A~G(前7个英文字母)小时数判定: 是前两个字符串中第二对相同的数字或大写字母A~N(前13个英文大写字母)分钟数判定: 相对简...

2020-03-05 22:54:11 148

原创 [PAT Basic Level] 1013 数素数

题目分析这道题和前面的素数对猜想的主要方法十分类似。为了达到题目的时间要求,需要对素数筛选的办法适当加快。在判定素数的过程尽可能加大步长后,最终各个测试点最长耗时6ms。加速素数筛选的办法同1007的解析:[PAT Basic Level] 1007、1008不过这次不小心把修改步长的变量声明放错了地方,导致有两个点一直过不了,后来仔细检查终于发现,写代码还是要小心啊,再简单的问题编写不仔...

2020-03-04 22:54:53 75

原创 [PAT Basic Level] 1009、1010、1011、1012

1009. 说反话题目分析:这道题,难度不大,但是要写的精炼还需要熟练掌握一些库函数,如果纯靠自己自己编相应的代码会稍微复杂一些。我对这些库函数不太熟悉,自己写了一个一个,后来在网上看到了人家写的更便捷的实现,贴出来别人的优质代码和自己写的,做一个比较吧。源代码(本人)#include <stdio.h>int main(){ int sentence[81];...

2020-03-03 16:22:51 347

原创 [PAT Basic Level] 1007、1008

1007 素数对猜想题目分析这道题主要需要在寻找素数的算法上下功夫。首先有下面这样一个结论:除2、3之外的所有素数,一定满足模6等于1或者5。即大于3的素数均可以表示成6n−16n-16n−1或者6n+16n+16n+1的形式。证明:若n=6k、6k+2、6k+4n=6k、6k+2、6k+4n=6k、6k+2、6k+4,显然是偶数,不可能是素数若n=6k+3n=6k+3n=6k+3 那...

2020-03-02 22:54:29 106

原创 [PAT Basic Level] 1006.换个格式输出整数

题目分析相对而言是一道比较简单的水题,按照题目要求按部就班编写即可。稍微可以注意的地方是,为了方便输出,可以用一个char数组来存放表示”十“和”百“的字符。源代码#include <stdio.h>int main(){ int testValue; scanf("%d",&testValue); char showByte[3]={' '...

2020-03-01 23:23:42 57

原创 [PAT Basic Level] 1005.继续(3n+1)猜想

题目分析这道题乍看起来比较复杂,不容易想到什么比较好的应对策略,至少我没有想到。 所以没有办法,朴素的思想蛮力硬干。目标是找出那些“关键数”,稍加分析可以知道,这实际上就是指删除那些会出现在其他数的卡拉兹序列(这里称一个数按卡拉兹猜想的规则进行运算,一直到1所产生的序列)的数。因此就可以想出这样一种办法:从第一个数出发,求出它的卡拉兹序列,然后对整个数组除当前数外的所有元素进行遍历,找出所...

2020-03-01 23:19:37 69

原创 [PAT Basic Level]1004

题目分析水题,按题目要求按部就班编写代码。为避免浪费空间,根据输入情况动态分配内存即可。另外注意姓名、学号不超过10字符但用char数组的话还是要开11个元素的空间,确保最后能插入’\0’。源代码#include <stdio.h>int main(){ int stuNumber; scanf("%d",&stuNumber); in...

2020-03-01 22:59:10 64

原创 [PAT Basic Level]乙级 1003.我要通过

题目分析:这道题,挺无奈的,说难也难说简单也简单,刚开始理解错了WA了一发,后来注意到题目给的最后一个测试例子,才明白自己回错了意。解这道题的关键是要理解题目真正想表达的意思,有点考阅读理解和细致思考的感觉。题目重点在于第二和第三个条件如何理解:对于第二个条件要注意到:x是一个字符串,因此 xPATx,就意味着PAT左右两侧的字符串必须相同,要么都是空字符串,即没有,要么都是A组成的串,...

2020-02-29 23:55:05 126

原创 PAT Basic Level(乙级)1002.写出这个数

解题思路:根据题目可知,数字最大为10100−110^{100}-110100−1,即最多有100位,那么数字之和最大为999,三位数足够表示。另外要注意判断输出首位的方法。剩下的问题就是存储各位数字已经逐个求和并用汉字输出。可以用一个长度为100的数组储存,也可以直接用向量vecotr或者string,后者可以不用考虑长度的问题而且也有现成的函数返回其长度,可能编写代码相对简单,本次没有选择...

2020-02-29 22:12:56 89

原创 键盘模拟文件尾EOF

getchar()指令在stdio.h头文件中进行了定义,单次读取一个字符,包括空格、换行符等都能读取。很多时候,在不确定输入长度的情况下,常常使用while循环配合getchar()对字符串进行读取。判断while循环结束的条件需要认真考虑,下面主要分析文件尾条件下getchar()指令对文件尾条件EOF的读取情况。EOFEOF是一个宏定义,通常定义在stdio.h文件中(#define ...

2020-02-29 21:08:27 874 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除