Cod sursa(job #1248396)

Utilizator sulzandreiandrei sulzandrei Data 25 octombrie 2014 02:03:19
Problema Cautare binara Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 1.76 kb
#include <stdio.h>
#include <stdlib.h>
FILE *f,*g;
void met1(int v[],int x,int n)
{
    int poz = 0, pas = 1<<30;
    while (pas>>=1)
        if (poz+pas<n && v[poz+pas]<=x)
            poz += pas;
    if ((poz<n) && (poz>-1))
        fprintf(g,"%d\n",poz+1);
    if ((poz == 0) && (v[0]!=x))
        fprintf(g,"-1");
    if ((poz == n-1) && (v[n-1]!=x))
        fprintf(g,"-1");
}
void met2(int v[],int n,int x)
{
    int poz = 0, pas = 1<<30;
    while (pas >>= 1)
    {
        if(pas+poz<n && v[pas+poz]<=x)
            poz += pas;
    }

        if (poz == n-1)
            if (v[n-1] == x)
                fprintf(g,"%d\n",n);
            else
                fprintf(g,"%d\n",n-1);
        if (poz == 1)
            if (v[1] == x)
                fprintf(g,"2\n");
            else
                fprintf(g,"1\n");
        if ((poz !=1) && (poz != n-1) && (v[poz]== x))
        {
            puts("ds");
            fprintf(g,"%d\n",poz+1);
        }
        if (poz !=1 && poz!= n-1 &&v[poz]!=n)
            {
                if (v[poz]<x)
                fprintf(g,"%d\n",poz+1);
            else
                fprintf(g,"%d\n",poz);
                puts("dsa");
            }
}
int main()
{
    int n,i,x,m,opt;
    f = fopen("cautbin.in","r");
    g = fopen("cautbin.out","w");
    fscanf(f,"%d",&n);
    int *v = malloc(sizeof(int)*n);
    for(i=0;i<n;i++)
        fscanf(f,"%d",v+i);
    fscanf(f,"%d",&m);
    for(i=0;i<m;i++)
    {
        fscanf(f,"%d %d",&opt,&x);
        switch(opt)
        {
            case 0:met1(v,x,n); break;
            case 1:fprintf(g,"\n");//met2(v,x,n); break;
            case 2:fprintf(g,"\n");//met3(v,x); break
        }
    }
    fclose(f);
    fclose(g);
    return 0;
}