Cod sursa(job #3278662)

Utilizator andreirose44Turcu Andrei andreirose44 Data 20 februarie 2025 14:15:42
Problema Cautare binara Scor 0
Compilator c-64 Status done
Runda Arhiva educationala Marime 2.2 kb
#include<stdio.h>
#include<stdlib.h>

int cautare(int v[],int low, int high, int x){
    while(low<=high){
        int mid = low + (high-low)/2;
        if(v[mid] == x)
            return mid;
        else if(v[mid] > x)
            high = mid - 1;
        else
            low = mid + 1;
    }
    return -1;
}
int main()
{
    FILE* in = fopen("cautbin.in", "r");
    FILE* out = fopen("cautbin.out", "w");
    int nr,n,i,m,*v,k,p,z=0;
    v = (int*)malloc(n * sizeof(int));
    fscanf(in,"%d",&n);
    for(i = 0; i < n; i++)
        fscanf(in,"%d",&v[i]);
    //fscanf(in,"%d",&nr);
    //fprintf(out,"%d", cautare(v,0,n,nr));
    fscanf(in,"%d",&m);
    for(i = 0; i < m; i++){
        fscanf(in,"%d",&k);
        switch(k){
            case 0:
            {
                fscanf(in,"%d",&nr);
            p = cautare(v,0,n-1,nr);
            if(nr == v[p]){
                while(nr == v[p+1]){
                    p++;
                }
            fprintf(out,"%d\n",p+1);
            } else {
                fprintf(out, "%d\n", p+1);
            }
            break;
        }
            case 1:
            {
            fscanf(in,"%d",&nr);
            while (z == 0){
                p = cautare(v,0,n-1,nr);
                if(nr == v[p]){
                    while(nr == v[p+1]){
                        p++;
                    }
                    z = 1;
                } else {
                    nr--;
                }
            }
            fprintf(out,"%d\n",p+1);
            break;
        }
            case 2:
            {
                fscanf(in,"%d",&nr);
                z = 0;
                while(z == 0){
                    p = cautare(v,0,n-1,nr);
                    if(nr == v[p]){
                        while(nr == v[p-1]){
                            p--;
                        }
                        z = 1;
                    }
                    else {
                        nr--;
                    }
                }
            fprintf(out,"%d\n",p+1);    
            break;
            }
        }
    }

   // fprintf(out,"%d",nr);
    free(v);
    fclose(in);
    fclose(out);
    return 0;
}