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

バッタがターゲットに到達できるかどうかをチェックするC++コード


サイズnの文字列Sと別の数kがあるとします。文字列には4種類の文字が含まれています。セルが少ないと考えてください。バッタはターゲットに到達するためにジャンプしたいと考えています。キャラクター '。'対応するセルが空であることを意味します。文字「#」は、対応するセルに障害物が含まれており、バッタがそこにジャンプできないことを意味します。 「G」はバッタがこの位置から始まることを意味し、「T」はターゲットセルを意味します。バッタは、現在の位置から正確にk個のセルをジャンプすることができます。バッタがターゲットにジャンプできるかどうかを確認する必要があります。

したがって、入力がS ="#G#T#"のような場合; k =2の場合、出力はTrueになります。これは、GからTまでが2セル離れており、kが2であるため、バッタが1回のジャンプでそこに到達できるためです。

ステップ

これを解決するには、次の手順に従います-

n := size of S
x := position of 'G' in S
y := position of 'T' in S
if x > y, then:
   swap x and y
for initialize i := x, when i < y, update i := i + k, do:
   if S[i] is same as '#', then:
      Come out from the loop
if i is same as y, then:
   return true
Otherwise
   return false

理解を深めるために、次の実装を見てみましょう-

#include <bits/stdc++.h>
using namespace std;
bool solve(string S, int k)
{
   int n = S.size();
   int i;
   int x = S.find('G');
   int y = S.find('T');
   if (x > y)
      swap(x, y);
   for (i = x; i < y; i += k)
   {
      if (S[i] == '#')
         break;
   }
   if (i == y)
      return true;
   else
      return false;
}
int main()
{
   string S = "#G#T#";
   int k = 2;
   cout << solve(S, k) << endl;
}

入力

"#G#T#", 2

出力

1

  1. Pythonでジャンプするかどうかによって位置nに到達できることを確認するプログラム

    1からnまでの数直線があるとします。最初は位置0にあり、1ステップジャンプして1に進み、次に2桁ジャンプして位置3に到達し、次に3位置ジャンプして6に到達します。これを維持するかどうかを確認する必要があります。位置nに到達できるかどうか。 したがって、入力がn =21の場合、1 + 2 + 3 + 4 + 5 + 6 =21 であるため、出力はTrueになります。 これを解決するには、次の手順に従います- j:=(1 +(1 + 8 * n)の平方根)/ 2 if | j --int part of j | <=0、次に Trueを返す それ以外の場合はFalseを返します

  2. Pythonでロボットが目標位置に到達できるかどうかをチェックするプログラム

    現在、位置(0、0)(デカルト平面)に座っているロボットがあるとします。 N(北)、S(南)、W(西)、およびE(東)を含む、実行可能な移動のリストがある場合。宛先座標(x、y)に到達できるかどうかを確認する必要があります。 したがって、入力がmoves =[N、N、E、E、S]、(x、y)=(2,1)のような場合、出力はTrueになります。 これを解決するには、次の手順に従います- temp_coord:=[0,0] 移動の移動ごとに、 移動が「N」と同じ場合、 temp_coord [1]:=temp_coord [1] + 1 それ以外の場合、移動が「S」と同じ