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

C++プログラムですべてのガソリンポンプを訪問する最初の循環ツアーを見つけます


円があり、円上にn個のガソリンポンプがあるとします。 -

のような2つのデータセットがあります
  • すべてのガソリンポンプが持つガソリンの量
  • あるガソリンポンプから別のガソリンポンプまでの距離。

トラックが円を完成できる最初のポイントを計算します。 1リットルのガソリンの場合、トラックは1単位の距離を移動できます。ガソリンポンプが4つあり、ガソリンの量があり、次のガソリンポンプからの距離が[(4、6)、(6、5)、(7、3)、(4、5)]のようになっているとします。トラックが循環ツアーを行うことができる最初のポイントは、2番目のガソリンポンプです。出力はstart=1(2番目のパトロールポンプのインデックス)である必要があります

この問題は、キューを使用して効率的に解決できます。キューは、現在のツアーを保存するために使用されます。最初のガソリンポンプをキューに挿入し、ツアーを完了するか、現在のガソリン量がマイナスになるまでガソリンポンプを挿入します。量がマイナスになった場合は、空になるまでガソリンポンプを削除し続けます。

#include <iostream>
using namespace std;
class pump {
   public:
   int petrol;
   int distance;
};
int findStartIndex(pump pumpQueue[], int n) {
   int start_point = 0;
   int end_point = 1;
   int curr_petrol = pumpQueue[start_point].petrol - pumpQueue[start_point].distance;
   while (end_point != start_point || curr_petrol < 0) {
      while (curr_petrol < 0 && start_point != end_point) {
         curr_petrol -= pumpQueue[start_point].petrol - pumpQueue[start_point].distance;
         start_point = (start_point + 1) % n;
         if (start_point == 0)
            return -1;
      }
      curr_petrol += pumpQueue[end_point].petrol - pumpQueue[end_point].distance;
      end_point = (end_point + 1) % n;
   }
   return start_point;
}
int main() {
   pump PumpArray[] = {{4, 6}, {6, 5}, {7, 3}, {4, 5}};
   int n = sizeof(PumpArray)/sizeof(PumpArray[0]);
   int start = findStartIndex(PumpArray, n);
   if(start == -1)
      cout<<"No solution";
   else
      cout<<"Index of first petrol pump : "<<start;
}

出力

Index of first petrol pump : 1

  1. C++で三角形の図心を見つけるプログラム

    この問題では、三角形の3つの頂点の座標を示す2D配列が与えられます。私たちのタスクは、C++で三角形のセントロイドを見つけるプログラムを作成することです。 セントロイド 三角形の3つの中央値は、三角形の3つの中央値が交差する点です。 中央値 三角形の頂点は、三角形の頂点とその反対側の線の中心点を結ぶ線です。 問題を理解するために例を見てみましょう 入力 (-3, 1), (1.5, 0), (-3, -4) 出力 (-3.5, -1) 説明 Centroid (x, y) = ((-3+2.5-3)/3, (1 + 0 - 4)/3) = (-3.5, -1) ソリューションアプロ

  2. C++で平行四辺形の面積を見つけるプログラム

    この問題では、平行四辺形の底と高さを表す2つの値が与えられます。私たちのタスクは、C++で平行四辺形の領域を見つけるプログラムを作成することです。 平行四辺形 は、反対側が等しく平行な4辺の閉じた図形です。 問題を理解するために例を見てみましょう 入力 B = 20, H = 15 出力 300 説明 平行四辺形の面積=B* H =20 * 15 =300 ソリューションアプローチ この問題を解決するために、平行四辺形の面積の幾何学的公式を使用します。 Area = base * height. ソリューションの動作を説明するプログラム 例 #include <io