![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
PTA
Zeal Young
一直默默生长的知识控
展开
-
一键生成PTA代码文件……(嗯,批量新建cpp文件名)
如下,以敬:程序员的懒~@echo offsetlocal enabledelayedexpansionset n=1000for /L %%i in (1,1,10) do (set /a n+=1copy A1.png A1!n:~-3!.png)@echo on(bat语言还是”挺有趣的~“)...原创 2019-08-13 00:15:11 · 571 阅读 · 0 评论 -
PTA B1008 数组元素循环右移问题:使用最大公约数的思想
前言遇到新的思考方式时,首先考虑的应该是:为什么能这么想?而我为什么没想到。关于本题本题,能够想到的最简单方法:直接用for循环,加上数组第n位作为暂存。但是,以学习思维方式的考量,如果能够借此理解“最大公约数的怎么用?”不失为一个好方式。举个例子8个数字,右移3位比如:1 2 3 4 5 6 7 8(注意,数组标号是从0开始)结果应是:6 7 8 1 2 3 4...原创 2019-07-08 20:18:04 · 472 阅读 · 1 评论 -
PTA A1049 Counting Ones:关于找规律的思路
题意题目的意思,给定一个数字,在从0到小于等于这个数的所有数字,找包含1的数字,并计算所有1的个数。误区如果直白的考虑,就比如12,含有1的数字有4个,但是题目要求的是这些数字中一共含1的个数,所以,如果按照找含1数字来解题,那么可能的困难就会很大。正确的算法试着把一串数字拆开看,比如12,看成1 2,从右往左依次1号、2号,那么1出现在1号位置的可能:0 1和1 1,两个1...原创 2019-07-08 17:40:41 · 245 阅读 · 0 评论 -
PTA A1104 Sum of Number Segments:计算顺序问题
问题所在ans += temp * (i + 1) * (N - i);ans += (i + 1) * (N - i) * temp;就人脑而言,上述两个狮子应该是没差别的,但是!在具体的代码实现中就不是:问题点出在检测点3、4,但是暂时还没有想明白是为什么。可能的原因:这里是处理浮点数和整型相乘,相乘的顺序和给定的整型数大小有关系。...原创 2019-07-08 16:38:02 · 311 阅读 · 0 评论 -
PTA A1069 The Black Hole of Numbers :犯傻记录
犯傻1首先,题目给的是整型数字,那么想要进行排序,就必要先转换给数组形式。这里的暂存数组可以是全局变量,也可以是定义在main()函数中。犯傻2关于连续输出:假设N是一开始数,那么后面变化的也就是N,如果作死再设一个temp来暂存中间差值,得不偿失!这里可是使用while循环。犯傻3题目很明确,就四位数字,所以,不管是排序还是for循环,都用数字4为边界就好。...原创 2019-07-08 15:58:42 · 173 阅读 · 0 评论 -
PTA Again and Again
一遍不够,再多来几遍……题号:A1010RadixA1089Insert or MergeA1060Are They Equal原创 2019-07-02 15:14:08 · 139 阅读 · 0 评论 -
PTA A1010 Radix的溢出问题
题目的陷阱这种题目,最大的障碍在于出题者可能会设置一些特别的检测点。比如超出int范围之类。对应办法是用更大的long long型,但是哪些参数用,哪些不用就是个问题了。索性,不用思考的方式,是全局long long。但是作为学习,还是要知道使用的原则的。保持一致的原则比如:long long a; 那么后面用到a的新定义,也一定要是long long的,否者如果题目刁难,就可...原创 2019-07-02 15:12:28 · 377 阅读 · 0 评论 -
PTA A1085 Perfect Sequence 的题意理解
题目意思题目给是一个perfect sequence的定义,即给定一个参数p,要求给定的数字中选择几个数字,组成一个满足最大项不大于最小项乘参数的数列。即:Given a sequence of positive integers and another positive integer p. The sequence is said to be a perfect sequence...原创 2019-07-02 11:07:13 · 302 阅读 · 0 评论 -
PTA A1067 Sort with Swap(0, i)理解思路(如何记录与交换)
核心理解点题目的意思是每次只能用0和另一个数进行交换。所以这里想的是,尽可能每次都往正确的位置上换。所以,一个数组,谁来作为键,谁来作为值,就很重要了。这里要交换,数字是不变的,变化的是数字的位置,所以,用一个for循环,可以把初始的位置,以值得形式记录下来。关于交换得误区比如,一开始0的位置是7,这个位置7的正确值应该是数字7,所以,0要和7交换位置。交换之后,数字7就归位...原创 2019-06-17 21:38:36 · 323 阅读 · 0 评论 -
PTA A1023 Have Fun with Numbers :两个注意点
注意点一看清楚题意!看清楚题意!看清楚题意!Double it we will obtain 246913578, which happens to be another 9-digit number consisting exactly the numbers from 1 to 9, only in a different permutation. Check to see t...原创 2019-07-12 20:56:24 · 454 阅读 · 0 评论 -
PTA A1089Insert or Merge:模拟+查询
核心思路问题是要判断给定的序列是用归并排序还是插入排序。最先想到的笨方法:自己模拟一遍插入排序和归并排序(可以用到sort函数减少代码量);然后再判断查找。问题点和技巧因为输出时要相应方法的下一步骤,所以用if判断的时候,位置很重要:可以一开始就是判断,如果当前满足,那么排序依次,直接判断退出。此时的判断函数、输出函数都可以单独构造。最后的main函数只需要输入、判断和调用就...原创 2019-07-04 15:31:40 · 194 阅读 · 0 评论 -
PTA A1029 Median:Memory Limit Exceeded的问题
超出内存限制其实《算法笔记》的解法已经挺优化了,因为只是在做比较,然后找到后输出。但是,再多想一步,多开一个数组是要耗内存的,既然只是作为比较,那么第二个数组可以不开。再多想一步:两个数组,可能的情况,无非是两个中的一个比较大,第二个数组用for遍历,很可能结束了,还没到中间,因为第一个数组可能过大,所以这里需要单独考虑一步。思路的打开把原本静态的存储,变成现在的动态比较。...原创 2019-07-04 17:22:49 · 380 阅读 · 0 评论 -
A!PAT A1001:测试点遗漏项
遗漏思考点a + b等于0的情况!!!这一点尤其注意,因为很容易没有顿悟之前,想死都想不到……等于零的情况可以单独考虑或者在赋初值时考虑。算法思维关于冒号的输出:两种思路;一种把冒号存储在数组里(不一定要char,可以特殊的int)一种是根据后一位下标确定之前要输出冒号,因为,输出遍历数组是倒序。...原创 2019-08-12 23:56:34 · 603 阅读 · 0 评论 -
“变长数组” 的注意点
维度问题?默认的数组都是一维,“变长数组也是”。只不过变长数组被定义为一个容器后,更容易实现对于数据的操作的。易混淆点一个数据对应多个数据,即一对多,那么就是一维度;如果一个多,多里面仍然是一对多,那么就是二维形式。...原创 2019-08-13 20:39:40 · 768 阅读 · 0 评论 -
A!A1002:格式输出问题
聪明反被聪明误嗯……其实是不够聪明,所以自以为加了条件判断就能够满足“空格的要求”,实际上在边界位置上处理还是不当的。仔细观察就好一般情况末尾不能有空格,那么除了用if判断外,还有一种思维要考虑:即,本身空格的输出就是有规律的,或者说,可以看成一组一组的,让空格打头~...原创 2019-08-13 20:13:42 · 211 阅读 · 0 评论 -
PTA A1074 Reversing Linked List:解题思路
这道题很有思考份量思考的关键:题目要求的是对一个链表,每M个独立进行反转,且多余的结点不反转。这里的思考量在于:因为链表是前后连着的,虽然这里只涉及next,但是,反转之后的next指向哪里,就是问题了,可以思考的是:能否听过for循环加if判断来实现?举个几个例子比如:1 2 3 4 5 66个结点,反转4个那么就是4 3 2 1 5 6其中需要注意,1的next指...原创 2019-07-21 18:38:13 · 310 阅读 · 0 评论 -
PTA A1100 Mars Numbers 解题思路
核心要点题目的意思很明确,以13为进制,进行数字和字符串之间的转换,并且题目也不是美容道理的没有上限,而是说明了,最大的数是169,即13的平方。那么就可以这么思考:169的13进制,相当于100,题目以此为边界,说明:可以直接把0 0到12 12对应的字符串都先计算出来,然后对照查表即可。需要用到的工具两种映射:数字 -> 字符串;字符串 -> 数字;分别用...原创 2019-07-17 15:44:03 · 203 阅读 · 0 评论 -
PTA A1059 Prime Factors:解题思路
题目意图给定一个在long整型内的整数,要我们来用素数来分解。质数就是素数,这一点要知道。应对的策略肯定需要一个素数表,计算的范围,可以大致估算一下,2的63次方,大概时10的十八次方,素数表算法10的五次方肯定没问题了。然后需要一个结构体来记录,每一个素数对应的个数,因为答案最后的形式是有次方项的。还有一点,很重要的一点,是怎么找到这些素数?基本的思路是这样的:一个数拆成两...原创 2019-07-10 21:38:47 · 208 阅读 · 0 评论 -
Float Point Exception
神奇的错误……当我知道错误出在哪里的时候,不禁自己笑出了声……这要是考试,岂不完蛋?!ll gcd(ll a, ll b) { return b == 0 ? a : (b, a % b);}递归调用一定记得,有始有终,即:有入口进去,以及能够最终出来。...原创 2019-07-10 16:03:50 · 4480 阅读 · 1 评论 -
PTA A1093 Count PAT's:题目中明确要求
题目要求For each test case, print in one line the number of PAT’s contained in the string. Since the result may be a huge number, you only have to output the result moded by 1000000007.这句话很重要!如果...原创 2019-07-04 21:49:38 · 194 阅读 · 0 评论 -
PTA A1037 Magic Coupon的进一步考虑?
考虑点这个题,本意上是有选择地进行最优组合,但如果变成全部匹配了之后的最优呢?似乎变得更简单了?前者,不需要考虑正负交叉项,后者,只要关注一个变量就好。具体如下:前者的循环结构:while (x < Nc && x < Np && coupon[x] < 0 && product[x] < 0) ...原创 2019-06-17 19:44:58 · 145 阅读 · 0 评论 -
PTA A1037 Magic Coupon:理解上的致命错误
原题描述如下The magic shop in Mars is offering some magic coupons. Each coupon has an integer N printed on it, meaning that when you use this coupon with a product, you may get N times the value of that...原创 2019-06-17 19:20:08 · 286 阅读 · 0 评论 -
PTA A1060 Are They Equal 的解题思路
理解题目要咱干什么?科学计算法?但不是正常以为的科学计数法,而是以0.xxx打头的一种计数,所以,清楚到这一点,题目就解决一半了。因为不管是大于1还是小于1的数,最终的格式都一样,需要比较的也就是**0.之后的数字和指数是否相同,相同则Yes,能相同表示,不同则No,分别表示。用什么工具解决?字符串拼接?对,需要这一个功能,即C++中的string,包括string.erase(...原创 2019-06-21 14:42:50 · 215 阅读 · 0 评论 -
PTA1031:查验身份证。这个挺有趣,记录一下~
题目描述如下:1031查验身份证(15point(s))一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值:Z:0 1 2 3 4 5 6 7 8...原创 2019-04-28 16:14:31 · 828 阅读 · 0 评论 -
PTA 1027 Colors in Mars(读懂题目意思很重要!!)
题目描述如下:1027Colors in Mars(20point(s))People in Mars represent the colors in their computers in a similar way as the Earth people. That is, a color is represented by a 6-digit number, where the ...原创 2019-04-28 15:06:51 · 290 阅读 · 0 评论 -
PTA A1031. Hello World for U(使用fgets注意换行符的读入)
题目描述如下:1031Hello World for U(20point(s))Given any string ofN(≥5) characters, you are asked to form the characters into the shape ofU. For example,helloworldcan be printed as:h de ll...原创 2019-04-28 11:13:30 · 287 阅读 · 0 评论 -
算法笔记:PTA A1002 多项式相加
题目1002A+B for Polynomials(25分)This time, you are supposed to findA+BwhereAandBare two polynomials.Input Specification:Each input file contains one test case. Each case occupie...原创 2019-04-21 16:26:14 · 488 阅读 · 0 评论 -
PTA A1042 Shuffling Machine(洗牌机器之妙不可言的输出)
题目内容如下:Shuffling is a procedure used to randomize a deck of playing cards. Because standard shuffling techniques are seen as weak, and in order to avoid "inside jobs" where employees collaborate...原创 2019-04-21 13:16:53 · 287 阅读 · 1 评论 -
PAT B1012数字分类:关于测试点5和6无法通过的问题分析
问题点:A1的条件判断,如果将能被5整除和是偶数分开判断,那么就没问题;但是如果把它们合并在一起,用逻辑与判断,就会有问题。两次代码如下:#include <cstdio>int main(){ int n, temp; scanf("%d", &n); int arrange[5] = {0}; int counts[5]...原创 2019-04-21 09:54:01 · 1104 阅读 · 7 评论 -
PTA 1046 划拳问题(一点逻辑上的判断)
这道题之所以要记录,原因在于:代码的实现很容易,但是逻辑上清理就需要一点点耐心了。题目如下1046 划拳 (15 分)划拳是古老中国酒文化的一个有趣的组成部分。酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字。如果谁比划出的数字正好等于两人喊出的数字之和,谁就赢了,输家罚一杯酒。两人同赢或两人同输则继续下一轮,直到唯一的赢家出现。下面给出甲、乙两人的划拳...原创 2019-04-12 21:31:50 · 285 阅读 · 0 评论 -
PTA B1016 “部分A+B” 通过使用字符串(字符数组)实现
题目如下正整数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,中...原创 2019-04-12 20:47:55 · 242 阅读 · 0 评论 -
算法思考:如何写出一个递归算法?(最大子列和问题)
有这么一种感觉,递归算法在思考角度上是“显得很懒惰的”,为什么这么说呢?因为递归的本质是自己调用自己,机器这么做很干净利落,一步一步来就好,只要把每一次递归的条件改动一下就好。但是我们人脑在思考递归时就显得很吃力……(因为在硬件的底层实现,递归是很恐怖的,要不断的开新栈,然后再逐个返回收栈,可能是我脑子的缓存不够用吧,多想那么几个复杂的就崩了)不过,要写出一个递归函数还是很容易的。...原创 2019-05-05 10:43:38 · 721 阅读 · 0 评论 -
PTA 二分查找问题(非数组实现)
问题来自与一道练习题,属于程序填空,需要根据已有条件进行补充,具体说明如下:函数接口定义:Position BinarySearch( List L, ElementType X );其中List结构定义如下:typedef int Position;typedef struct LNode *List;struct LNode { ElementType Dat...原创 2019-05-05 15:33:43 · 1250 阅读 · 0 评论 -
PTA 1035: Password(结构+引用的方法)
算法精髓利用c++特性中的引用机制,我的理解是:引用 == 给地址起别名,本质上还是传地址。通过引用,可以直接在另一个函数进行判断和修改,然后在主函数中使用。具体如下struct node { char name[12], password[12]; bool ischange;}T[1005];void trans(node& t, int&am...原创 2019-05-19 10:00:23 · 290 阅读 · 0 评论 -
PTA B1042 字符统计:scanf()读入字符串的局限。
主要问题题目的输入比较极端,比如空格、回车都要算进去……比如下面这个:This is a simple TEST. There ARE numbers and other symbols 1&2&3...........所以,scanf在这里就不行了,因为它遇到空格或换行就结束了。所以接需要整行读入。一个很有效的解决方法就是:fgets()具体使用如下:inclu...原创 2019-06-08 15:38:47 · 419 阅读 · 0 评论 -
PTA 1092 To Buy or Not to Buy(想法上的疏漏)
主要疏漏点因为使用的是整型的哈希表来记录,所以值等于0时就是没有,此时miss++。但是最后的判断不能用miss == len2,这是很明显的,但是脑袋一懵就忘记了。所以遇到这种问题,最好是从新梳理一遍。以下几种方式都可实现:if (hashTable[index] != 0) {hashTable[index]--;} else {miss++;}if (miss ==...原创 2019-06-08 14:51:08 · 220 阅读 · 0 评论 -
1075 PAT Judge 的几点说明
刷题太多,容易忘掉自我……所以,这种题,一定要先把题目读明白了,比如,这里的学生id就指明了从00001开始。然后这道题还有一个小问题:数组默认是从0开始的,但是这里不管是学生id还是题目id都是从1开始的,所以,需要开辟一个大一号的数组。原题如下The ranklist of PAT is generated from the status list, which shows t...原创 2019-06-01 16:27:54 · 663 阅读 · 0 评论 -
PTA A1033 To Fill or Not to Fill 的致命疏忽
首先看一下题目的输入输出这是其中一组输入:50 1300 12 86.00 12507.00 6007.00 1507.10 07.20 2007.50 4007.30 10006.85 300很显然,后面八行的数据分别是加油站的,而目的地的信息是在第一行就给出了,然而也就是这一点,容易忘记这也是一个需要考虑的结点。否则,顺着思路写下去,到最后不是到了终点,而是...原创 2019-06-12 20:28:38 · 249 阅读 · 0 评论 -
贪心算法:PTA A1033 To Fill or Not to Fill 的思考逻辑
核心逻辑之所以能够贪心的前提,是不同的加油站有不同的价格,所以想要实现整体最优(最便宜的总价格),那么就不能只看到眼下的,一次性加满,不够再补加。(这样就太狂野粗放了)。所以,要实现贪心,首先就是要往后多考虑一步。因为题目假设的初始条件是初始油箱未空,所以如果不存在距离为0的加油站,直接打印结束。如果有距离为0,那就可以考虑下一个加油站了(前提是已经按照距离从小到大排序。)在考虑下一...原创 2019-06-12 19:43:49 · 554 阅读 · 0 评论 -
愚蠢记录:PTA B1009说反话(输出的问题)
直接讲明这道题如果用,两个数组来做,思路上很简单,但是具体运行起来就会很愚蠢,私以为是一种实现的缺陷。之后会学习到栈,可以用栈的思路回来再做一下,但是现在的实现真的很愚蠢,举例如下:几组不同的输入abcd efgh abcd efgh abcd efgh abcd efgh abcd efgh abcd efgh abcd efgh abcd efgh a80abcd ef...原创 2019-05-16 19:11:59 · 352 阅读 · 0 评论