Почему мой код не выполняет функцию правильно - PullRequest
0 голосов
/ 07 октября 2018

Код должен найти элемент 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);
}

1 Ответ

0 голосов
/ 07 октября 2018

В соответствии с вопросом максимальный элемент находится в 4-м индексе с (7) ^ 2 + (2) ^ 2 = 53 <121. </p>

   int find_distance(int p[][2], int n, int d){
   int l=0, r=n-1, max=-1;
   while (l<=r)/*here l<=r because the largest 
      element is at 4th index*/{
    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;//4
}
...