川のブログ

川の適当気ままなブログです。 

AOJ 0188 Search

こんにちは川です。

問題文に書いてあると通りにしたら解けます。

気を付けるとしたら max と minの関係が崩れた時にループをやめることですかね。

実際にやってみるとわかります。

 

ソースコード

 

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    while(cin>>n,n){
        int num[n],ans;
        for(int i=0;i<n;i++)cin>>num[i];
        cin>>ans;
        int serch,kawa[2]={0,n-1};
        for(int i=1;kawa[1]>=kawa[0];i++){
            serch=(kawa[0]+kawa[1])/2;
            if(num[serch]>ans)kawa[1]=serch-1;
            else if(num[serch]<ans)kawa[0]=serch+1;
            if(num[serch]==ans||kawa[0]>kawa[1]){
                cout<<i<<endl;
                break;
            }
        }
    }
}