有N个数的数列,要求从键盘上输入一个数,用顺序查找法查找该数是否存在数列中。如果该数存在数列中,则打印出该数是数列中第几个元素;若不在,则打印出“无此数”的信息,该如何处理
有N个数的数列,要求从键盘上输入一个数,用顺序查找法查找该数是否存在数列中。如果该数存在数列中,则打印出该数是数列中第几个元素;若不在,则打印出“无此数”的信息
大神帮我改改程序啊
#include <iostream>
using namespace std;
int main(){
int i,num;
int list[10]={1,3,5,7,9,13,15,17,19,21};
cin>>num;
for(i=0;i<10;i++)
{
if(list[i]==num){
cout<<i+1<<endl;
break;
}
else cout<<"not found!"<<endl;
}
return 0;
}
------解决方案--------------------
大神帮我改改程序啊
#include <iostream>
using namespace std;
int main(){
int i,num;
int list[10]={1,3,5,7,9,13,15,17,19,21};
cin>>num;
for(i=0;i<10;i++)
{
if(list[i]==num){
cout<<i+1<<endl;
break;
}
else cout<<"not found!"<<endl;
}
return 0;
}
------解决方案--------------------
- C/C++ code
#include <iostream> using namespace std; int main(){ int i,num; int list[10]={1,3,5,7,9,13,15,17,19,21}; cin>>num; for(i=0;i<10;i++) { if(list[i]==num){ break; } } if(i>=10) cout<<"not found!"<<endl; else cout<<"Pos is "<<i+1<<endl; return 0; }
------解决方案--------------------
看楼主给出的数组已经从小到大排好了序,那么用二分查找法效率应该会更高一些,下面的代码供参考:
- C/C++ code
#include <iostream> using namespace std; int main() { int i,num; int list[10]={1,3,5,7,9,13,15,17,19,21}; cin>>num; int start = 0; int end = sizeof(list) / sizeof(list[0]) - 1; while(true) { int temp = (start + end) / 2; if(end - start == 1) { if(list[start] == num) { cout << "Position is " << start << endl; break; } else if(list[end] == num) { cout << "Position is " << end << endl; break; } else { cout << "Not found." << endl; break; } } if(list[temp] == num) { cout << "Position is " << (start + end) / 2 << endl; break; } if(list[temp] < num) { start = temp; } else { end = temp; } } return 0; }