Compile Error 编译错误
可以说是最常见的错误了吧
包括但不限于
1.头文件打错
2.函数或变量类型名字打错 如print(printf) foe(for) inc(int)
3.花括号只扩了一半
4.忘记加分号;
或用了中文分号;
5.调用函数不符合规范 如printf (-1) scanf(%d,a)
6.定义函数或变量顺序出错 比如int b=a;int a;
再比如
void i(int u){
int u=s(2);
}
int s(int n){
return n*n;
}
7.程序内有变量或函数名或形参名字重复 如
int u;
void u{
cout<<1;
}
下面这段 可能不会报错 但容易导致程序答案错误
int r;
int bsearch (int l,int r){
return r;
}
Memory Limit Exceeded 超出内存限制
一般是由于递归层数过多导致,本人经验为dfs未恢复现场(回溯)
例子1:acwing.1113 红与黑
如果用dfs做,未添加语句g[x][y] = '#';
就会出现该错误
dfs函数的代码段如下
int dfs(int x,int y){
int r=1;
g[x][y]='#';//这一行很重要哦
int i;
for (i=0;i<4;i++){
int a=x+fx[i],b=y+fy[i];
if (a >= 0 && a < n && b >= 0 && b < m && g[a][b] == '.') r+=dfs(a,b);
}
return r;
}
Time Limit Exceeded 超时错误
超时错误形式多种多样,本人经验0.死循环 1.用错算法(dp题用二分做)2.精度要求过高
例子1: acwing.680 剪绳子 在该题中浮点数二分答案的精度只要1e-4即可
温馨小贴士:一般浮点数二分精度控制在要求输出的小数点后数上+2就行 如本题是小数点后二位 那么1e-4即可
本人错误的代码段如下
while (r-l>1e-9){//精度要求过高,导致超时
double mid=(l+r)/2;
if (check(mid)<m) r=mid;
else l=mid;
}
Float Point Exception 浮点异常
通常为发生了1.a/=0
或2.a%=0
的情况
Segmentation Fault 段错误
发生的情形有1.数组下标越界 2.链表访问了空指针的值 3.scanf忘记加&
例子1: acwing.29. 删除链表中重复的节点
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* deleteDuplication(ListNode* head) {
auto dummy = new ListNode(-1);
dummy->next = head;
auto p = dummy;
while (p->next) {
auto q = p->next;
while (q&&p->next->val == q->val) q = q->next;
//由于空指针不能访问val的值所以应该是上面这行
//而不能是while (p->next->val == q->val) q = q->next;
if (p->next->next == q) p = p->next;
else p->next = q;
}
return dummy->next;
}
};
花括号只扩了一般-》花括号只扩了一半
已改正 感谢指正
Good