C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

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

  1. C++の特定のセットに存在するすべてのノードから到達可能なすべてのノードを検索します

    1つの無向グラフと一連の頂点があるとします。与えられたセットに存在するすべての頂点から到達可能なすべてのノードを見つける必要があります。 したがって、入力が次のような場合 この場合、出力は[1,2,3]と[4,5]になります。これは、これらが2つの連結成分であるためです。 これを解決するには、次の手順に従います- ノード:=グラフ内のノードの数 訪問したサイズの配列を定義します:nodes+1。そして0で埋める 1つのマップを定義するm comp_sum:=0 iを初期化する場合:=0、i

  2. C++で指定された開始文字からの最長の連続パスの長さを検索します

    異なる文字のマトリックスが与えられます。 1つの文字から始めて、現在の文字よりも大きいすべての文字をトラバースすることにより、最長のパスを見つける必要があります。文字は互いに連続しています。 Eから始まります。 最長のパスを見つけるために、深さ優先探索アルゴリズムを使用します。 DFS中に、いくつかのサブ問題が複数回発生する場合があります。そのサブ問題の計算を何度も回避するために、動的計画法のアプローチを使用します。 例 #include<iostream> #define ROW 3 #define COL 3 using namespace std; // tool