Cod sursa(job #3278658)
Utilizator | Data | 20 februarie 2025 13:42:58 | |
---|---|---|---|
Problema | Cautare binara | Scor | 0 |
Compilator | c-64 | Status | done |
Runda | Arhiva educationala | Marime | 2.13 kb |
#include<stdio.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[10],k,p,z=0;
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,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,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,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);
fclose(in);
fclose(out);
return 0;
}