题目:
输入一段不定长度的数字(各不相同),要求输入一个查找数字,如果在第一次输入中存在则输出其在数组中的位置,如果不存在则输出按从小到大排序存储在数组的位置;
结果要求:
输入:
4 {1 3 5 4} 2
6 {7 3 4 9 10 5} 9
输出:
1
4
我的程序:
#include <iostream>
using namespace std;
int main(int argc, char const *argv[])
{
int k;
cin>>k;
int array[k];
cin>>array[0];
for (int i = 1; i < k; ++i)
{
cin>>array[i];
if(array[i]<array[i-1])
{
int temp =array[i];
array[i] =array[i-1];
array[i-1] =temp;
continue;
}
if(array[i]==array[i-1])
{
cout<<"Same!"<<endl;
}
}
int target;
cout<<"What is your number?"<<endl;
cin>>target;
int left =0,right =k-1;
while(left<=right)
{
int mid =(left+right)/2;
if(array[mid] == target) {cout<<mid<<endl;break;}
if(array[left] == target) {cout<<left<<endl;break;}
if(array[right] == target) {cout<<right+1<<endl;break;}
if(array[mid] > target) {right =mid-1;continue;}
if(array[mid] < target) {left =mid+1;continue;}
if(target >array[mid] && target <array[mid+1]) {cout<<mid+1<<endl;break;}
}
return 0;
}
结果:
错误教训:
left ==right 还会进行迭代
修正好的程序:
#include <iostream>
using namespace std;
int main(int argc, char const *argv[])
{
int k;
cin>>k;
int array[k];
cin>>array[0];
for (int i = 1; i < k; ++i)
{
cin>>array[i];
if(array[i]<array[i-1])
{
int temp =array[i];
array[i] =array[i-1];
array[i-1] =temp;
continue;
}
if(array[i]==array[i-1])
{
cout<<"Same!"<<endl;
}
}
int target;
cout<<"What is your number?"<<endl;
cin>>target;
int left =0,right =k-1;
while(left<=right)
{
int mid =(left+right)/2;
if(array[mid] == target) {cout<<mid<<endl;break;}
if(array[left] == target) {cout<<left<<endl;break;}
if(target >array[mid] && target <array[mid+1]) {cout<<mid+1<<endl;break;}
if(array[right] == target) {cout<<right+1<<endl;break;}
if(array[mid] > target) {right =mid-1;continue;}
if(array[mid] < target) {left =mid+1;continue;}
}
return 0;
}
结果: