在C++中找到最小半徑,使得至少k個點位於圓內


假設我們有一些點和一個整數k。我們必須找到一個以(0, 0)為中心的圓的最小半徑,以覆蓋k個點。因此,如果點像(1, 1)、(-1, -1)、(1, -1),而k = 3,則半徑將為2。

在這裡,我們將找到每個點與(0, 0)之間的歐幾里得距離,然後對距離進行排序,並在排序後返回第k個元素。

示例

 線上演示

#include<iostream>
#include<algorithm>
using namespace std;
struct point{
   int x, y;
};
int minRadius(int k, point points[], int n) {
   int dist[n];
   for (int i = 0; i < n; i++)
   dist[i] = points[i].x * points[i].x + points[i].y * points[i].y;
   // Sorting the distance
   sort(dist, dist + n);
   return dist[k - 1];
}
int main() {
   int k = 3;
   point points[] = {{1, 1}, {-1, -1}, {1, -1}};
   int n = sizeof(points)/sizeof(points[0]);
   cout << "Minimum radius: " << minRadius(k, points, n) << endl;
}

輸出

Minimum radius: 2

更新於:2019年12月18日

283 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.