很多人刚学算法的时候,觉得模拟题有啥难的?不就是照着题目描述一步步做嘛。
结果一上考场,模拟题总是拿不到满分。要么这里漏个条件,要么那里算错个边界,最后丢了一堆分。
今天就来聊聊,模拟题到底为啥这么容易丢分。
什么是模拟题?
说白了就是:题目让你干啥,你就干啥。
比如题目说:给你一个数,把它倒过来输出。
那你就写代码,把数字的每一位拆出来,反过来拼在一起,输出。
就这么简单,不需要你想什么复杂的算法,照着做就行。
那为啥还会丢分?
第一个坑:没仔细读题
这是最常见的问题。
很多人题目看个大概,就开始写代码了。写着写着才发现:哦,还有这个条件我没看到。
比如题目说:输入一个正整数,不超过1000。
你没仔细看,写了个负数也处理,结果多了一堆没用的代码,还可能写错。
或者题目说:输出的时候两个数之间用空格隔开,最后一个数后面不要有空格。
你没注意到最后那个要求,结果输出最后多了个空格,评测机直接判错。
模拟题丢分,80%都是因为没读清楚题。
第二个坑:边界情况没考虑到
模拟题最容易错的就是边界。
比如题目说:给你一个字符串,判断它是不是回文串。
你写了个循环,从两头往中间比。哎,看起来没问题。
但是你有没有考虑过:字符串长度是0?长度是1?长度是奇数?长度是偶数?
这些边界情况,你只要漏一个,测试用例就过不了。
再比如:输入一个年份,判断是不是闰年。
你知道四年一闰,百年不闰,四百年再闰。
但是你有没有考虑过公元前?或者年份是0?
虽然题目可能不会考这么偏,但常见的边界情况你得想到。
第三个坑:细节太多,写着写着就乱了
模拟题还有个特点:条件特别多。
比如题目让你模拟一个排队叫号系统:
- 先到的先服务
- 有VIP可以插队
- 每个窗口服务时间不一样
- 中午要休息一个小时
- 周末不上班
你看,就这么一个小题,条件一大堆。
写着写着你就乱了:哎,我刚才那个VIP插队的逻辑写哪了?中午休息的判断加了没?
最后代码写出来,自己都不知道哪错了。
怎么避免丢分?
第一个办法:读题读三遍。
第一遍大概看一下题目讲啥。
第二遍拿笔把所有条件都列出来:输入是什么,输出是什么,有哪些限制条件,有哪些特殊情况。
第三遍开始写代码,写一条就对照一条。
别嫌麻烦,模拟题就是这样,你读题读仔细了,能省好多调试的时间。
第二个办法:先把所有情况列出来,再写代码。
别上来就写代码。先在纸上或者脑子里过一遍:
- 正常情况是什么样?
- 最小的输入是什么样?
- 最大的输入是什么样?
- 有没有空输入?
- 有没有极端情况?
把这些都想清楚了,再开始写代码。
第三个办法:写完之后自己造几个测试用例跑一下。
写完代码别就不管了。自己拿几个例子测一下:
- 正常的例子对不对?
- 边界的例子对不对?
- 离谱的例子会不会崩?
比如判断回文串,你就拿:
- "abcba" 应该是对的
- "abba" 应该是对的
- "a" 应该是对的
- "" 应该也是对的
自己测一遍,能发现好多问题。
总结一下
模拟题其实是最简单的题,因为不需要你想算法,照着做就行。
但它也是最容易丢分的题,因为太考验细心程度了。
很多人模拟题拿不到满分,不是不会做,是太粗心了。
读题仔细点,边界想全点,写完多测几个用例。
做到这三点,模拟题的分你就能拿到手了。
GESP四级备考:模拟题看着简单,为什么你总是拿不到满分?