Cod sursa(job #2081120)

Utilizator ancatacheTache Anca Maria ancatache Data 3 decembrie 2017 23:50:42
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.83 kb
//
//  main.cpp
//  CautareBinara
//
//  Created by Anca Tache on 03/12/2017.
//  Copyright © 2017 Anca Tache. All rights reserved.
//

#include <iostream>
#include <fstream>


int functia1(int v[],int y, int f, int l)
{
    int mij;
    if(f==l) return -1;
    else
    {
        mij=f +(l-f)/2;
        if(y==v[mij])
        {
            if(v[mij+1]!=v[mij])
                return mij;
            else
                return functia1(v,y,mij+1,l);
        }
        else if(y<v[mij])
            return functia1(v,y,f,mij-1);
        else
            return functia1(v,y,mij+1,l);
    }
}

int functia2(int v[],int y,int f, int l)
{
    int mij;
    mij=f +(l-f)/2;
    if(v[mij]==y)
    {
        if(v[mij+1]!=v[mij])
            return mij;
        else
            return functia2(v,y,mij,l);
    }
    else if(v[mij]<y)
    {
        if(v[mij+1]>y)
            return mij;
        else
            return functia2(v,y,mij,l);
    }
    return 0;
}

int functia3(int v[],int y, int f, int l, int n)
{
    int mij;
    mij=f +(l-f)/2;
    if(v[mij]==y)
    {
        if(v[mij-1]!=v[mij])
            return mij;
        else
            return functia3(v,y,f,mij,n);
    }
    else if(v[mij]>y)
    {
        if(v[mij-1]<y)
            return mij;
        else
            return functia3(v,y,f,mij,n);
    }
    return n;

}

int main(int argc, const char * argv[]) {
    
    std::ifstream f;
    std::ofstream g;
    int n,nr,x,y;
    f.open("cautbin.in");
    g.open("cautbin.out");
    f>>n;
    int *v =new int[n];
    for(int i=1;i<=n;i++)
        f>>v[i];
    f>>nr;
    for(int i=0;i<nr;i++)
    {
        f>>x>>y;
        if(x==0)
            g<<functia1(v,y,1,n)<<"\n";
        else if(x==1)
            g<<functia2(v,y,1,n)<<"\n";
        else if(x==2)
            g<<functia3(v,y,1,n,n)<<"\n";
    }
    f.close();
    g.close();
    
    return 0;
}