在 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 次查看

开启你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.