「プログラミング珠玉」コードの道7:このアルゴリズムは全世界のプログラマーが16年ぶりに書いたものです.これとは思いもよらなかったです.


このブログのアルゴリズムは、物語のアルゴリズムです.きっと好きになります.
このアルゴリズムがあります.
1:業界の巨人経典『プログラミング珠玉』の著者は、授業で思想を与え、時間を問わずプログラマー達に実現させ、すべてのプログラマーは提出する時、自分が正しいと思っていますが、結果は高級プログラマーでも90%以上の人が書き間違えました.
2:世界史詩級コンピュータ天才、人工知能の父、図霊賞受賞者ドナルドEvin Knuthは、伝説級の大作『コンピュータプログラム設計芸術』で、あるアルゴリズムの論文は1946年に発表されましたが、このアルゴリズムの最初の誤りのないプログラムは1962年まで現れました.
きっとこのアルゴリズムはすごいでしょう!!!
ぶるぶる震える.
ぶるぶる震える.
ぶるぶる震える.
ぶるぶる震える.
ぶるぶる震える.
ぶるぶる震える.
じゃ、関子を売らないでください.その名前は「二分検索」です.!!!!!!!!!!!
以上の話は全部本当です.
この物語をもって、すべてのプログラマを励まし、むやみに自分を卑下して自信をなくしてはいけません.全世界の16年、どれぐらいの天才ですか?
いつでも、自分を信じて、一生懸命練習して、自分を高めて、いつまでも間に合います.自分の知能が足りないと思い込んではいけません.
#include 
#include 
#include 

using namespace std;

vector nums; //        vector
int target = 123; //      

//          -1
int BinarySearch(vector &arr, int target);

int main(){
	freopen("in.txt", "r", stdin);

	int num;
	while (scanf("%d", &num) != EOF){
		nums.push_back(num);
	}

	int pos = BinarySearch(nums, target);

	if (pos >= 0 && pos < nums.size()){
		cout << pos <<  ' ' << nums[pos] << endl;
	}else{
		cout << "error" << endl;
	}

	return 0;
}

int BinarySearch(vector &arr, int target){
	int left = 0, right = arr.size() - 1;

	while (left <= right){
		int mid = (left + right) / 2;
		if (arr[mid] == target){
			return mid;
		}else if (arr[mid] < target){
			left = mid + 1;
		}else if (arr[mid] > target){
			right = mid - 1;
		}else{
			return -1;
		}
	}

	return -1;
}