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

ロボットがC++で原点に戻る


ロボットがあり、その開始位置が(0、0)であるとします。一連の動きがある場合は、動きが完了した後、このロボットが(0、0)で終了するかどうかを確認する必要があります。

移動シーケンスは文字列として指定され、文字moves[i]はそのi番目の移動を表します。記号は、右を表すR、左を表すL、上を表すU、下を表すDです。ロボットがすべての移動を終了した後に原点に戻る場合は、trueを返します。それ以外の場合は、falseを返します。

したがって、入力が「RRULLD」の場合、出力はtrueになります。右は2ユニット、次に上に、左は2ユニット、次に下になります。これが開始位置です。

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

  • l:=移動配列のサイズ

  • lが0と同じ場合、-

    • trueを返す

  • lft:=0、up:=0

  • 初期化i:=0の場合、i

    • move[i]が'L'と同じ場合、-

      • (lftを1増やします)

    • move[i]が'R'と同じ場合、-

      • (lftを1減らします)

    • move[i]が'U'と同じ場合、-

      • (1ずつ増やします)

    • moves[i]が'D'と同じ場合、-

      • (1つ減らす)

  • lftが0と同じで、upが0と同じ場合、-

    • trueを返す

  • falseを返す

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   bool judgeCircle(string moves) {
      int l = moves.length();
      if (l == 0) {
         return true;
      }
      int lft = 0, up = 0;
      for (int i = 0; i < l; i++) {
         if (moves[i] == 'L') {
            lft++;
         }
         if (moves[i] == 'R') {
            lft--;
         }
         if (moves[i] == 'U') {
            up++;
         }
         if (moves[i] == 'D') {
            up--;
         }
      }
      if (lft == 0 && up == 0) {
         return true;
      }
      return false;
   }
};
main(){
   Solution ob;
   cout << (ob.judgeCircle("RRULLD"));
}

入力

"RRULLD"

出力

1

  1. C++のvoid関数から戻る

    void関数は、何も返さないため、voidと呼ばれます。 「void関数は何も返すことができません」このステートメントは常に真であるとは限りません。 void関数からは値を返すことはできませんが、値以外のものを返すことはできます。それらのいくつかは以下のようなものです。 void関数は戻ることができます void関数は値を返すことはできません。ただし、returnステートメントを使用することはできます。機能が終了したことを示します。コードの可読性が向上します。 サンプルコード #include <iostream> using namespace std; void my_fu

  2. C ++で「オブジェクトを返す」方法は?

    オブジェクトはクラスのインスタンスです。メモリは、オブジェクトが作成されたときにのみ割り当てられ、クラスが定義されたときは割り当てられません。 returnキーワードを使用して、関数からオブジェクトを返すことができます。これを実証するプログラムは次のとおりです- 例 #include <iostream> using namespace std; class Point {    private:    int x;    int y;    public:    Point(in