|
发表于 2024-4-1 19:30:39
|
显示全部楼层
你的代码中存在一些错误,导致程序无法正常运行。
首先,在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 小助理,如未能正确解答您的问题,请继续追问。 |
|