调试程序小技巧

本文主要讲述了在编程过程中遇到的常见问题,如差一点就能AC、测试样例通过后全WA等,并提供了相应的调试策略。强调了注意特例、测试特例的重要性,以及在遇到困难时要做好自己能做的部分。同时,文章还讨论了编写清晰注释对于保持思路清晰的关键作用,以及如何检查程序的输出状态。
摘要由CSDN通过智能技术生成

提问:是否遇到过如下情形?

1、代码差一个点AC
2、刚开始有思路,后来写着写着思路忘了
3、测试样例过了,然后莫名全部WA
4、……

好了,如果有类似的或者一样的人可以看一看下文

(其实,没有的也可以看一看,给我提点改进建议_

问题一:还差一丢丢AC


像这样

这样

这样

例子还有好多……好多(此处省略无穷个好多),那既然这么多,该怎么解决呢?

从调试代码开始
  • 因为在竞赛中是不可能让各位把代码先交上去评测,得到结果后再次调试的,所以,在调代码的时候,一定要把所有情况都考虑到。
注意特例

有时只错那么几个点可能是特例问题,因为特例的状况如下:

  • 1、数据点太大(如图2 , 2、3、4测试点实际上是10、11、12,巨大无比)

  • 2、0和极限(比如图1很可能)

  • 3、特殊规则(俗称“卡常”,比如图3很可能)

测试特例
  • 我们是有主动权的人类,所以要自己test自己的代码能不能过特例

  • 1、大数据点:这个……貌似现场出完了考试也结束了,就检查一下算法复杂度能不能优化就行了

  • 2、0和极限:0我们可以自己算出答案,极限的答案就算了

  • 3、特殊规则:卡常点自己出自己算自己干没问题

  • 总而言之,考场上一定要干自己能做、不怎么浪费时间的事!

然后,如果还是错了,那就没办法了。我们做好自己能做的、该做的,剩下的就听天由命了!

问题二:测试样例愉快AC,交上去全部WA

附上脑图:

问题三:写着写着……哎?思路是啥?

  • 这实际上是一个注释没写好问题的翻版

  • 刚开始学的时候,一定要养成写注释的好习惯,要不再往后学,越学越复杂,算法都记不住,不写注释岂不是越来越乱?

  • 举个栗子,我就是一开始嫌写注释麻烦,还得来回来去折腾中英文输入法

  • 但是后来,我就觉得不写注释有两大坏处:

    1、别人看不懂:某谷网友帮我调代码,看不懂我这里那里是要干什么;老师帮我调代码,问我为什么要这么干
    2、自己看不懂:过一段时间,我去复习知识点 (好习惯值得表扬) ,看见我初期写的代码,根本看不懂
  • 话说回来,思路不能靠记,好记性不如烂键盘嘛

  • 那什么样的注释会赢得众人欢呼呢?
    以c++为例:

  • 实际上,这篇代码的注释是按照写复杂算法的需求写的

  • 这篇代码只需要这些:


//这里可以加上题目编号,方便查找 
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;

int a[100100]; 

int main(){
	
	int n;
	cin>>n;
	
	
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	
	//使用打枪法排序 ,从小到大 
	for(int i=1;i<=n;i++){		 
		for(int j=i+1;j<=n;j++){	 
			if(a[i]>a[j])	swap(a[i],a[j]);//大的放后面 
		}
	}
	
	 
	for(int i=1;i<=n;i++){
		cout<<a[i]<<" ";
	} 
	
	return 0;
} 
  • 注释可以写在当行后面,也可以写在此行的上一行

  • 看怎么习惯怎么来吧

问题四:如何检查程序?输出对应什么评测状态?

话不多说,上万能脑图:

基本考场上遇到的可能就是这些了,我们下期再见!

谢谢观赏

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值