Cho một dãy số khoảng 1000000 kí tự số toàn 0 và 1. Biết rằng các số 0 đứng trước các chữ số 1: 000....0011...11. Hãy cho biết vị trí của số 0 cuối cùng trong dãy. ​ Thuật toán: Ta tiến hành tìm kiếm nhị phân trên xâu kí tự để tìm ra vị trí số 0 cuối cùng như sau: - Tìm phần tử giữa xâu đang xét - So sánh kí tự ở vị trí giữa xâu với kí tự 0. - Nếu kí tự giữa xâu là kí tự 0 thì ta tìm ở nửa sau của xâu, nếu không phải kí tự 0 (mà là 1) thì ta tìm ở nửa trước của xâu. //giúp mình nha !! yhamks

1 câu trả lời

 #include<bits/stdc++.h>

using namespace std;

void nhap(int a[],int n) {​​​​​​​    

 for(int i=0;i<n;i++)   

  {​​​​​​​         

cin>>a[i];  

   }

​​​​​​​ }​​​​​​​

void xuly(int a[],int d,int c) {​​​​​​​

    int mid;   

  while(d<=c)

    {​​​​​​​       

  mid=(d+c)/2;

        if(a[mid]==0)

d = mid + 1;    

         else c = mid - 1;

    }​​​​​​​    

 cout<<mid-1;

}

​​​​​​​ int main()

{​​​​​​​   

  int n,a[100];  

   cin>>n;   

  nhap(a,n);

    xuly(a,0,n-1);   

  return 0;

}​​​​​​​