Cod sursa(job #260810)

Utilizator mrpopescuPopescu Mihai Tudor mrpopescu Data 17 februarie 2009 16:02:58
Problema Cautare binara Scor 40
Compilator c Status done
Runda Arhiva educationala Marime 1.1 kb
#include <stdio.h>
#include <stdlib.h>
inline int cbin0(int v[],int dim,int x){
	int i;
   i=0;
   while(v[i]<=x && i<dim) i++;
   if(v[i-1]==x) return i;
   	else return -1;
}
inline int cbin1(int v[],int dim, int x){
	int i;
   i=0;
   while(v[i]<=x && i<dim) i++;
   return i;
}
inline int cbin2(int v[],int dim, int x){
	int i;
   i=dim-1;
   while(v[i]>=x && i>=0) i--;
   return i+2;
}
#define deschidere(cale,mod,f)\
	if((f=fopen(cale,mod))==NULL){\
   	printf("\nNu se poate deschide %s.\n",cale);\
      exit(1);\
      }
#define LMAX 100000
int main(){
	int v[LMAX],x,n,m,i,o;
   FILE *f,*g;
   deschidere("cautbin.in","rt",f);
   deschidere("cautbin.out","wt",g);
   fscanf(f,"%d",&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",&o,&x);
      switch(o){
      	case 0:
         	fprintf(g,"%d\n",cbin0(v,n,x));
            break;
         case 1:
         	fprintf(g,"%d\n",cbin1(v,n,x));
            break;
         case 2:
         	fprintf(g,"%d\n",cbin2(v,n,x));
      }
   }
   return 0;
}