答案错了怎么查
约 8 分钟
提交 WA(答案错误)时别对着大数据干瞪眼。查错的正路是:先用样例对,样例都过不了说明有明显逻辑错;样例过了,就自己造小数据逐组对,直到找到一组"程序输出 ≠ 正确答案"的最小反例,再手动把这组数据在代码里跑一遍,错在哪一步立刻现形。
// 怀疑求最大值有问题,造一组全负数小数据
int a[] = {-3, -1, -5}; // 正确答案应是 -1
int mx = 0; // bug:初值设 0,全负数时结果错成 0
for (int x : a) if (x > mx) mx = x;
cout << mx; // 输出 0(错),一下暴露初值 bug
要用小数据,是因为小数据步骤少、能全程手算,几行就能定位到出错的那一句;大数据你根本没法手工追踪,只知道"错了"却不知错在哪。坑:找反例要往边界和特殊情况上造(、全负、全相同),普通随机数据常常"碰巧对",反而把 bug 藏起来。定位到具体某行后,改起来往往只是一两个字符。
小纸条
为什么要"小"数据?
登录 后可看答案