PAT乙级练习教训

1004. 再筛选最大最小的时候,要在最开始设置好绝对最大(最小)的值,以防初始化会造成难以预料的结果。

1008.数组整体右移问题 我在开始本来打算用哈希表的思想,直接定出每个元素的最终位置。但是这个方法的可行性我考虑的非常不严谨,一个循环内,将它的下一个位置作为下一次的数,最终有可能会循环到它本身不能遍历所有元素。后来我决定每次只移动一位,一共移动M次。这样它的关键难度就仅在于需要两个中间变量。整体移动的思维过程要熟悉,要准确。

1009/1010 两道的名字分别叫做 说反话和一元多项式的求导 我认为算法简单,但是我对输入输出函数不熟悉。cin作用于while循环对于机器测试不会结束,始终在等待输入。pat奇怪在只要有正确输出就可以,所以可以把输出段代码放到while循环里。getline就可以直接读取一行的字符串.很方便!

1011 在对于A+B>C 开始用到一些数学函数 他们都在文件中,重要的是int的最小值不能以-2147483648出现,会有warning。

1012 一定要把题目全部看完,每个量的含义也要清楚。这道题在修改格式上花太久了。pow()可以依赖参数转换,int变量直接放进去我看暂时没问题。

1013 数素数,这个惟一的难点在格式上。我一开始的思路非常准,直接用整除10来确定换不换行就很合适。在情况分析上我出现了漏洞,如果它不满10个还是会进行换行,所以要对素数个数进行分类,总数是否超过10个。

1014. 福尔摩斯这个题的分类条件,我并没有记在心里,然后去敲,敲得条件总是我想当然得,在符合条件上就耗费了过多。大题干应该好好好好读题。相同的大写字母,相同的字符,甚至括号里从0开始计数的意思可能是第一个位置记为0.

              福尔摩斯这道题让我知道在c++里,不能用char* xxx【】来定义字符串数组,直接用string xxx【】就很方便。对于vector的初始化,用insert(vector.begin(),&xxx[0],&xxx[最后])函数,就很方便,不可以用{}来初始化。记住。

1019.数字黑洞 这道题就是我的黑洞。

         Q1.codeblocks中pow函数会有非常诡异的结果不方便debug,如果需要pow自行用递归速写一个。

         Q2.do while语句 当条件为真时,继续执行,条件的并交要写对。

         Q3.printf的格式输出考前要背一下,比如%04d 是输出四位,不够时在前边补零。

1020.月饼 类的初始化这里在考前重新复习一下c++primer,不清楚为什么某个值不能初始化(具体和c++11有怎样的关系)。

1027.对于所有pat题目,不要输出多余的空格,尽管它在控制台里长得一样。

1029.这道题好坑啊,pat官网上的检测结果总过不去的。。。在牛客网上通过了。。

1030.这道题一个坑点是整数溢出要用浮点数处理,第二个是运行超时问题,我觉得可以优化成用快排来处理,时间复杂度会降低很多。不过不想改了,乙级过80就好啦,还要考甲级呢。

1033 getline(cin,s)即无坏键 和可能最终输出空行的问题 (这道题竟然把循环条件写错了,认真点)

         空行不是空格,每一次键盘的输入或者是模拟自动会导致下一行的开启

1039 vector的初始化考试前一定一定要看看,我老是记不清,平时只用push_back()了

1040 逆序总结这个思路,真的是能把嵌套循环的时间复杂度n^3变成n,化腐朽为神奇,有个印象。

1042 循环条件千万千万注意让它别访问到越过下界,不然会你无法预计的问题的

1043 字符强制转换的索引法非常非常快

1044 字符串常用赋值方法掌握,今天记住str(str1.begin(),str1.begin()+3)不含第四个这样

1045 这道题有一个非常强的思路:从前往后遍历,保留遍历过所有元素的最大元素。我感觉这个思路会很有用

1049 浮点数相乘的顺序可能会影响精度  n取最大值1e5
当i=5e4时,(n-i)*(i+1)=5e4*(5e4+1)=2.5e9>2147483647(int最大值)
所以会溢出从而导致答案错误
换位置的话,由于a是double,所以会先将(n-i)转换成double再计算,所以不会发生溢出

1050 二维数组!!!矩阵

1051 -0.0023四舍五入 是-0.00 应该是0.00

1052 第二个测试点 是对输入序数的最小值有要求。严谨严谨

1054 我的判断函数写的太复杂了,做之前一定要想清楚思路。比如负数和正数完全没有必要复制粘贴差不多相同的内容,想清楚。 运算最好最好用同类型的来做。int double乘起来,结果的最后一位会飞。

          处理一行数据处理完成时,要把最后一个换行符弄掉。while((c=getchar())!='\n')

1062 确认公因子或质数,要用辗转相除法!

1066 能用二维数组做,就用二维数组做

1067 每一行数据要用getline()固定下来吧

1068 尽量不用二维数组甚至一维数组,用vector完全可以;学会用map,非常非常好用!

1073,1075 巧用数据结构去分析!控制时间上,太麻烦的题不要做。

1079 模块化编程,好检查,思路也更清晰,代码也漂亮。暂时对模块化编程的理解就是多写几个函数。

        用string来模拟加法,应对溢出的情况。

1084 to_string()方法. 

        段错误很常见的原因之一就是数组访问超范围,codeblocks竟然没有检测出来我也是很奇怪,尽量避免各种变量作为数组下标吧,容易把自己搞乱。

你可能感兴趣的:(PAT乙级练习教训)