Код должен найти элемент max в массиве 2d, расстояние которого меньше <(квадрат (d)).</p>
Массив 2d отсортирован по наименьшему расстоянию до максимального расстояния.
Расстояние вычисляется из заданной точки (x, y), например: если у нас есть точка (0,0) и 2-й массив (отсортированный) {{3,0}, {3, -1}, {3,3}, {5,0}, {7,2}}.и d = (квадрат (11)), то точка элемента максимального расстояния в массиве из (0,0), которая меньше d, равна {3, -1}, и функция должна вернуть (1), потому что этоСледующий элемент в массиве.
Теперь проблема в том, что код выводит 3 вместо 1 ... !!! ??(обратите внимание, что я не использовал функцию sqrt () в коде, вместо этого я использую d * d).
#include <stdio.h>
#define X 0
#define Y 0
int square(int x);
int diff(int a, int b);
int find_distance(int points[][2], int n, int d);
int diff(int a, int b){
int dis=square(a-X)+square(b-Y);
return dis;
}
int square(int x){
return x*x;
}
int find_distance(int p[][2], int n, int d){
int l=0, r=n-1, max=-1;
while (l<r){
int mid=(l+r)/2;
if(diff(p[mid][0], p[mid][1])>= d*d)
r=mid-1;
else if (diff(p[mid][0],p[mid][1])<d*d){
if (max<mid)
max=mid;
l=mid+1;
}
}
return max;
}
int main(){
int p[5][2]={{3,0},{3,-1},{3,3},{5,0},{7,2}};
int max=find_distance(p, 5, 11);
printf("%d, %d", max, X);
}