9.28 编程错误反思

刚学编程,一天就ac3道,有些慢,而且过程充满了坎坷(悲

下面本蒟蒻要记录自己debug的一些经历:

最常见:WA(wrong answer):

这种基本上是自己最初的构想想错了,解决步骤如下:

1.瞪眼法

观察题目给的数据,自己的输出与样例,发现差了1,很有可能是边界问题漏加了,或者边界设定的就有些问题,漏掉了某个点。

这种方法在数据相差过大不管用

2.调试法

把代码复制到vs2022上,按需求调试

技巧:按F9设置断点。还在为一行一行跑代码而烦恼吗?只要将鼠标放在你想停下来的那一行,左键,再按F9(我的机型要同时按fn与F9),这样你就跑完断点前面所有的代码,再把数据一股脑复制,后面再调试

F10看上去是一行一行跑代码,但会跳过函数的内部,这很黑箱,想进函数看看只能按F11

最后打开监视,这个在你按下F5或者F10或者F11后,再在调试选项中找到。自动监视还是手动输入想要监视的变量名看个人喜好,懒人就用自动监视吧,大部分情况够用

3.问大佬

学编程都是先有数学思路再码代码,数学方面想不出来是真没办法,要么问大佬,要么问ai,要么好好沉淀

segmentation fault:

这种基本上是小问题,要么是边界越界访问,要么是访问不到,还有可能是栈溢出了

1.仔细想边界

问问自己:是不是越界访问,是不是访问了某个东西但那个东西没通过某种判定而没有初始化

越界访问基本将边界-1再另行判断

有些时候用数组还要考虑empty的问题

2.代码优化

栈溢出:基本上是定义了过大的二维数组或者递归过深

二维数组看看能不能用vector<pair<int,int>>来代替

递归的话看看能不能改成用循环做的迭代

TLE(time limit exceeded):

这种错误要么秒改,要么推倒整个程序重做

秒改的是你可能在while循环中忘记加i++之类的东西,或者在某个判断语句中卡死了

举个二分的例子,我当时令循环的结束条件是l<=r,然后mid=l+(r-l)/2,通过二分算完,若mid>=target,r=mid,若mid<target,l=mid

于是,这就死了,因为当l与r差1的时候,mid一直是l,硬控计算机到天荒地老

另一种情况是我最不想遇到的,那就是写了一坨,思路不行,运行太慢

这种基本上在最初的设计上就有问题,可以尝试换种方法,贪心,dfs等哪个会试哪个

最后一种:compile error
这个没什么好说的,涉及太多,我见过同学将include写成inlcude的,还见过sort后面不会跟地址跟了数组元素的,见过vs2022用scanf_s结果复制到不支持scanf_s的平台上的,见过特定数据用scanf("(%d,%d)",&a,&b),结果同学把两个%d中间的逗号漏了的

这种基本上编译器都会报错,按它的改就是了,语法基础是咱必修的童子功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值