一点小问题不知道错在哪里了

img

img

img


为什么返回值无论如何都是1啊,就算返回distance也是1.。

pow(pow(px-x,2)+pow(py-y,2),1/2);这里1/2为0,一个数的0次方为1,所以所有的计算结果都为1了。
改成pow(pow(px-x,2)+pow(py-y,2),0.5);

下面修改了一下

#include <iostream>
#include <cmath>
using namespace std;
int near(float *x,float *y,float px,float py,int n);
int main()
{
    int n,m,i,j;
    cin >> n >> m;
    
    float *x= new float[n];
    float *y= new float[n];
    float *mx=new float[m];
    float *my=new float[m];
    
    for(i=0;i<n;i++)
    {
        cin >> x[i] >> y[i];
    }
    for(i=0;i<m;i++)
    {
        cin >> mx[i] >> my[i];
    }
    for(i=0;i<m;i++)
    {
        cout << near(x,y,mx[i],my[i],n) << endl;
    }
}

float len(float x,float y,float px,float py)
{
    return pow(pow(px-x,2)+pow(py-y,2),0.5);
}

int near(float *x,float *y,float px,float py,int n)
{
    int j,no=1;
    float distance=len(x[0],y[0],px,py);
    for(j=1;j<n;j++)
    {
        if(distance > len(x[j],y[j],px,py))
        {
            no=j+1;
            distance=len(x[j],y[j],px,py);
        }        
    }
    return no;
}

pow(pow(px-x,2)+pow(py-y,2),1/2)这里的问题。
c/c++里面,1/2相当于是整除,所以结果是0.如果你想要0.5,那么应该用1/2.0。
还有,既然是开平方,那么用sqrt(xxx)也可以的