在 C++ 中查詢給定線段長度的中點線段


在這個問題中,我們得到一個大小為 m 的陣列 arr[],表示線段的長度。

線段從 0 到 arr[0],arr[0] 到 arr[1],以此類推。我們的任務是找到位於所有線段中間的線段。

讓我們來看一個例子來理解這個問題:

輸入

arr[] = {5, 7, 13}

輸出

3

解釋

Segments are : (0, 5) , (5, 12), (12, 25)

解決方案

為了解決這個問題,我們將透過 (arrSum/2) 找到線的中間點。如果這個中間點是線段的起點或終點,則列印 -1。否則,列印線段編號。

程式演示了我們解決方案的工作原理:

示例

 線上演示

#include <iostream>
using namespace std;
int findSegmentWithMidPoint(int n, int m, int segment_length[]) {
   double centerPoint = (1.0 * n) / 2.0;
   int sum = 0;
   int segment = 0;
   for (int i = 0; i < m; i++) {
      sum += segment_length[i];
      if ((double)sum == centerPoint) {
         segment = -1;
         break;
      }
      if (sum > centerPoint) {
         segment = i + 1;
         break;
      }
   }
   return segment;
}
int main() {
   int m = 3;
   int segment_length[] = { 5, 7, 13 };
   int arrSum = segment_length[0];
   for(int i = 0; i < m; i++)
      arrSum += segment_length[i];
   int ans = findSegmentWithMidPoint(arrSum, m, segment_length);
   cout<<"The segment number where middle point lies is "<<ans;
   return 0;
}

輸出

The segment number where middle point lies is 3

更新於:2021年3月12日

121 次檢視

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告