最后一个点运行时错误,段错误,可能溢出,但是找不到原因。
——明白原因了,题干只给出N个数字,但是他们的大小没有限定,所以可能会超出数组范围。将记录的条件改为 if(n > 0 && n <= 100000) 就可以通过了。
#include <iostream>
using namespace std;
int main (){
int N, a[100005] = {0}, n;
cin >> N;
for(int i = 0; i < N; i++){
cin >> n;
if(n <= 0 && a[0] == 1) continue; // 错误
else if(n <= 0) a[0] = 1; // 错误
else a[n] = 1;
}
for(int j = 1; j < 100005; j++){
if(a[j] == 0){
cout << j; break;
}
}
return 0;
}
这是用map方法
#include <iostream>
#include <map>
using namespace std;
int main (){
int N, n, num = 0;
cin >> N;
map<int, int> ma;
for(int i = 0; i < N; i++){
cin >> n;
ma[n]++;
}
while(++num)
if(ma[num] == 0) break;
cout << num;
return 0;
}