whileを使った探索です。昇順に整数を入力し、その中で5の位置(配列の添字)を出力したいのですが、うまく行きません。5が存在しない場合はー1を出力させるのですが、自分のプログラムだと5を入力してもー1が出てきます。main関数内が間違っていると思うのですが、どのように治せばいいのでしょうか。(初歩的なミスだと思います。。。)
#理想の実行結果
入力 1 2 3 4 5
出力 4
C++
1#include <iostream> 2#include <vector> 3using namespace std; 4 5int binary_search(vector<int>& numbers, int target, int low, int high){ 6 while(true){ 7 if(low>high) 8 return -1; 9 int mid=(low+high)/2; 10 if(numbers[mid]==target) 11 return mid; 12 if(numbers[mid]<target) 13 low=mid+1; 14 else 15 high=mid-1; 16 } 17} 18 19int binary_search(vector<int>& numbers, int target){ 20 return binary_search(numbers, target, 0, numbers.size()-1); 21} 22 23int main(void){ 24 vector<int> numbers; 25 int nums=0; 26 cin >> nums; 27 int idx=binary_search(numbers,5); 28 if (idx>=0) 29 cout << numbers[idx] << endl; 30 else 31 cout << "-1" << endl; 32 return 0; 33} 34
回答4件
あなたの回答
tips
プレビュー