为什么返回值无论如何都是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)也可以的