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

C++で削除するボックスの数を見つけます


この問題では、各要素がボックスの山(それぞれの単位の高さ)を表す配列arr[]が与えられます。私たちの仕事は、削除するボックスの数を見つけることです。 。

その人は、箱の山の高さで配列のインデックス0に立っており、配列の最後に移動する必要があります。ある山から次の山に移動するための条件は、次の山にジャンプすることです。

ジャンプは、次のパイルが同じ高さであるか、それより低い高さである場合にのみ可能です。次の山の高さが高い場合、高さが等しくなるまで、人は次の山から箱を取り除く必要があります。最初のボックスから最後のボックスに移動するときに削除されるボックスの総数を見つける必要があります。

問題を理解するために例を見てみましょう

Input : arr[] = {5, 7, 3 , 1, 2}
Output : 3

説明

最初、その人は身長5です。

ステップ1 −高さが7の2番目の位置に移動するには、2つのボックスを削除する必要があります。

ステップ2 −高さ3の3番目の位置に移動するために、ボックスは削除されません。

ステップ3 −高さ1の次の位置に移動するために、ボックスは削除されません。

ステップ4 −高さ2の次の位置に移動するには、1つのボックスを取り外します。これにより、削除されるボックスの数は3になります。

ソリューションアプローチ

この問題の簡単な解決策は、配列を最初から最後までトラバースし、次の要素が現在の要素よりも大きいかどうかを確認することです。はいの場合は、その差を boxesRemovedに追加します 削除されるボックスの総数を保持する変数。最後に、 boxesRemovedを返します 。

ソリューションの動作を説明するプログラム

#include <iostream>
using namespace std;
int findBoxesRemoved(int arr[], int n){
   int boxesRemoved = 0;
   for (int i = 0; i < n-1; i++) {
      if (arr[i] < arr[i+1])
         boxesRemoved += (arr[i+1] - arr[i]);
   }
   return boxesRemoved;
}
int main(){
   int arr[] = { 5, 7, 3 , 1, 2, 6 };
   int n = sizeof(arr) / sizeof(arr[0]);
   cout<<"The total number of boxes to be removed to reach the end is "<<findBoxesRemoved(arr, n);
   return 0;
}

出力

The total number of boxes to be removed to reach the end is 7

  1. C++を使用して文字列の部分文字列の数を見つける

    この記事では、特定の文字列に形成できるサブ文字列(空ではない)の数を見つけるためのアプローチについて学習します。 Input : string = “moon” Output : 10 Explanation: Substrings are ‘m’, ‘o’, ‘o’, ‘n’, ‘mo’, ‘oo’, ‘on’, ‘moo’, ‘oon’ and &

  2. C++を使用して停止ステーションの数を見つける

    ポイントXとYの間にn個の中間駅があります。2つの駅が隣接しないように、s駅に停車するように列車を配置できるさまざまな方法の数を数えます。そのため、この記事では、停車駅の数を見つけるためのあらゆる可能なアプローチについて説明します。問題を見ると、sの駅数で列車を止めることができる組み合わせを見つける必要があることがわかります。 問題を解決するためのアプローチ 中間駅が8つあり、3つの中間駅で電車を止める方法を見つける必要がある例を見てみましょう。 n = 8, s = 3 (n-s)、つまり電車が止まらない駅が5つ残っています 電車が止まらないA、B、C、D、Eの5つの駅があります