代码需要找到二维数组中距离小于<(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/