Description
给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。
Input
输入描述:
第一行包含一个整数n。
第二行包含n个非负整数,为给定的数列,数列中的每个数都不大于10000。
第三行包含一个整数a,为待查找的数。
输入样例:
6
1 9 4 8 3 9
9
Output
输出描述:
如果a在数列中出现了,输出它第一次出现的位置(位置从1开始编号),否则输出-1。
输出样例:
2
Hint
HINT:时间限制:1.0s 内存限制:256.0MB
第一次提交时出现的问题
#include<iostream>
using namespace std;
int main(){
int n,m[n],a;
cin>>n;
for(int i=0;i<n;i++){
cin>>m[i];
}
cin>>a;
for(int i=0;i<n;i++){
if(a==m[i]){
cout<<i+1<<endl;
return 0;
}
}
cout<<-1;
return 0;
}
runtime error (运行时错误)就是程序运行到一半,程序就崩溃了。
①除以零
②数组越界:int a[3]; a[10000000]=10;
③指针越界:int * p; p=(int *)malloc(5 * sizeof(int)); *(p+1000000)=10;
④使用已经释放的空间:int * p; p=(int *)malloc(5 * sizeof(int));free(p); *p=10;
⑤数组开得太大,超出了栈的范围,造成栈溢出:int a[100000000];
结果发现是在定义数组m[n]时,n还没有赋值导致出错,c++中定义数组时,范围必须是定值
改进
#include<iostream>
using namespace std;
int main(){
int n,a;
cin>>n;
int m[n];
for(int i=0;i<n;i++){
cin>>m[i];
}
cin>>a;
for(int i=0;i<n;i++){
if(a==m[i]){
cout<<i+1<<endl;
return 0;
}
}
cout<<-1;
return 0;
}