c - 为什么我的代码不能正确运行该函数

标签 c arrays function loops multidimensional-array

代码需要找到二维数组中距离小于<(square(d))的最大元素。

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

距离是从给定点(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);
}

最佳答案

根据问题,最大元素位于第四个索引处 (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
}

关于c - 为什么我的代码不能正确运行该函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52684248/

相关文章:

c - C 语言中的 FFTPACK 示例

Java-判断数组的位置变化

c - C 中的固定大小缓冲区数组

c++ - `Cannot convert ' char(*)[50] ' to ' char** ' for argument ' 1 ' to ' void prac(char**) '` 将二维数组传递给函数时

PHP。扩大。调用现有的 PHP 函数

c - 在arm cortex-M4上使用DSP指令(C语言扩展)

java - 对象数组NullPointerException,处理3.3.6

wordpress - 为什么我不能通过我的子主题功能覆盖 WP 的 'excerpt_more' 过滤器?

javascript - 在javascript中调用对象内部的对象函数

c - 我的 C 代码中的错误 "segmentation fault"