Cod sursa(job #3278662)
Utilizator | 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;
}