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

C ++で[-k、+ k]境界内にとどまるように、移動の方向を出力します


この問題では、ユーザーが提供する特定の制限内にとどまるように、正の方向または負の方向に移動する有効な方法を見つける必要があります。

ここでは、移動できる最大値である特定の最大制限Kと、移動するn個の正の値の配列が与えられます。シーケンスを返す必要があります。つまり、K値と交差しないように、正または負の方向に移動する必要があります。

トピックをよりよく理解するために例を見てみましょう

Input : K = 56 and the array is [25 , 14 , 31 , 16 , 5].
Output : positive positive negative positive positive.

説明

まず、0 + a [0] =0 + 25 =25 <56はいかどうかを確認してから、正の方向に移動します。

ここで、25 + a [1] =25 + 14 =39 <56はいかどうかを確認し、正の方向に移動します。

ここで、29 + a [2] =39 + 31 =70 <56であるかどうかを確認します。次に、39-a [2] =39-31 =8> 0であるかどうかを確認し、負の方向に移動します。 。

8 + a [3] =8 + 16 =24 <56はいかどうかを確認し、正の方向に移動します。

16 + a [4] =16 + 5 =21 <56はいかどうかを確認し、正の方向に移動します。

それでは、この問題を解決するためのロジックを作成しましょう。正の方向に動くことが限界に達するかどうかをチェックする必要があります。いいえの場合は、正の方向に移動します。それ以外の場合は、負の方向に移動すると下限、つまり0に達するかどうかを確認します。到達しない場合は、負の方向に移動します。両方が「はい」の場合、返品できません。

このロジックに基づいて、コードを作成するために従わなければならないアルゴリズムは-

です。

アルゴリズム

Initially set position to 0.
Step 1 : for i -> 0 to n , n is the length of array. Follow step 2 - 4.
Step 2 : if initial_postition + a[i] < K, initial_position + = a[i]. Print “POSITIVE”.
Step 3 : else if initial_postition - a[i] > 0, initial_position - = a[i]. Print “NEGATIVE”.
Step 4 : else , print “NO MORE VALID MOVES”.

それでは、問題を解決するためのアルゴリズムの実装を示すプログラムを作成しましょう。

#include <iostream>
using namespace std;
void StepsTaken(int a[], int n, int k){
   string res = "";
   int position = 0;
   int steps = 1;
   for (int i = 0; i < n; i++) {
      if (position + a[i] <= k && position + a[i] >= (-k)) {
         position += a[i];
         cout<<"POSITIVE \t";
      }
      else if (position - a[i] >= -k && position - a[i] <= k) {
         position -= a[i];
         cout<<"NEGATIVE \t";
      } else {
         cout << -1;
         return;
      }
   }
   cout << res;
}
int main(){
   int a[] = { 12 , 24 , 9 , 17 , 8};
   int n = sizeof(a) / sizeof(a[0]);
   int k = 40;
   StepsTaken(a, n, k);
   return 0;
}

出力

POSITIVE    POSITIVE    NEGATIVE
      NEGATIVE    POSITIVE

  1. サブツリーがC++プログラムのBSTでもあるようなバイナリツリーの最大サブツリー合計

    この問題では、二分木BTが与えられます。私たちのタスクは、サブツリーがBSTでもあるように、バイナリツリーの最大サブツリー合計を見つけるプログラムを作成することです。 二分木には、各ノードが最大2つの子を持つことができるという特別な条件があります。 二分探索木は、すべてのノードが以下のプロパティに従うツリーです 左側のサブツリーのキーの値は、その親(ルート)ノードのキーの値よりも小さくなっています。 右側のサブツリーのキーの値は、その親(ルート)ノードのキーの値以上です。 問題を理解するために例を見てみましょう 入力 出力 32 説明 ここでは、BS

  2. C++のグリッドで指定された方向に可能な移動をカウントします

    サイズnxmのグリッドと開始点x、yを表す2つの変数nとmです。 また、移動((1,1)、(2,2))などとしてグリッド内を移動するために実行できるステップ/移動のペアも指定されます。移動の各ペアは、x、y軸で実行されるステップの単位を表します。目標は、境界[1、n] X [1、m]内のグリッド内をトラバースするために実行できる合計ステップを見つけることです。nが5、mが4、現在の位置が2、2で、選択されたステップが( 1、-1)次に、このステップを1回実行すると、(3,1)になります。このステップを再度実行すると、(4、-1)になります。これは、-1が範囲外であるため無効です。 例