你的代码中存在一些错误,导致程序无法正常运行。
首先,在for循环的条件判断中,应该使用小于号(<)而不是大于号(>)。所以修改第一个for循环为:`for(i=0;i<Mnum;i++)`,修改第二个for循环为:`for(i=0;i<Nnum;i++)`。
其次,你在循环内部没有给数组arr和n赋值。根据题目描述,应该是每行输入一个整数,代表球的编号。因此,你需要在循环内部添加如下代码:
最后,你的二分查找算法写得不正确。以下是一个正确的二分查找算法示例代码:bool binarySearch(int arr[], int left, int right, int target){
while(left <= right){
int mid = left + (right - left) / 2;
if(arr[mid] == target){
return true;
}
else if(arr[mid] < target){
left = mid + 1;
}
else{
right = mid - 1;
}
}
return false;
}
你可以在主函数中调用这个函数来进行二分查找。
综合起来,以下是一个修正后的代码示例:#include <iostream>
using namespace std;
bool binarySearch(int arr[], int left, int right, int target){
while(left <= right){
int mid = left + (right - left) / 2;
if(arr[mid] == target){
return true;
}
else if(arr[mid] < target){
left = mid + 1;
}
else{
right = mid - 1;
}
}
return false;
}
int main()
{
int Mnum, Nnum;
cin >> Mnum >> Nnum;
int *arr = new int[Mnum];
for(int i = 0; i < Mnum; i++){
cin >> arr[i];
}
int target;
for(int i = 0; i < Nnum; i++){
cin >> target;
bool result = binarySearch(arr, 0, Mnum-1, target);
if(result){
cout << "YES" << endl;
}
else{
cout << "NO" << endl;
}
}
delete[] arr;
return 0;
}
希望能够帮到你!如果还有其他问题,请随时提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |