「已注销」 2021-07-15 08:50 采纳率: 66.7%
浏览 37
已采纳

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

img

img

img


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

  • 写回答

2条回答 默认 最新

  • 浪客 2021-07-15 09:07
    关注

    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;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已采纳回答 7月15日
  • 创建了问题 7月15日