为什么我的代码无法正确运行该功能

时间:2018-10-06 23:41:15

标签: c arrays function loops multidimensional-array

代码需要在2d数组中找到距离小于<(square(d))的max元素。

二维数组从最小距离到最大距离排序。

从给定点(x,y)计算距离,例如: 如果我们有一个点(0,0)和二维数组(已排序){{3,0},{3,-1},{3,3},{5,0},{7,2}}。并且d =(square(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 :(得分:0)

根据问题最大元素位于第4个索引, (7)^ 2 +(2)^ 2 = 53 <121。

   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
}