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

サークルC++でバインドされたロボット


無限の平面があるとすると、ロボットは最初は位置(0、0)に立ち、北を向いています。ロボットは3つの命令のうちの1つを受け取ることができます-

  • G −直進1ユニット;

  • L −左方向に90度回転します;

  • R −右方向に90度回転します。

ロボットは順番に指示を実行し、指示は永遠に繰り返されます。ロボットが円を離れないように、平面に円が存在するかどうかを確認する必要があります。したがって、入力が[GGLLGG]のような場合、答えはtrueになります。 (0,0)から(0,2)まで、それは永久にループするので、これは閉じたパスであり、答えは真です。

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

  • 配列ディレクトリを作成します:=[[0,1]、[1,0]、[0、-1]、[-1,0]]

  • ペアの温度を作成します。最初はこれは(0、0)およびk:=0

  • 0からsのサイズまでの範囲のiの場合

    • s [i]がGの場合、

      • temp:=(dir [k、0]、dir [k、1])

    • それ以外の場合、s [i]がLの場合、k:=(k + 1)mod 4、それ以外の場合、k:=(k-1)mod 4

  • tempが(0、0)でなく、k> 0の場合はfalse、それ以外の場合はtrue

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

#include <bits/stdc++.h>
using namespace std;
int dir[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
class Solution {
   public:
   bool isRobotBounded(string s) {
      pair <int, int> temp({0,0});
      int k = 0;
      for(int i = 0; i < s.size(); i++){
         if(s[i] == 'G'){
            temp.first += dir[k][0];
            temp.second += dir[k][1];
         }else if(s[i] == 'L'){
            k = (k + 1) % 4;
         }else{
            k = ((k - 1) + 4) % 4;
         }
      }
      return temp.first == 0 && temp.second == 0 || k > 0;
   }
};
main(){
   Solution ob;
   cout << (ob.isRobotBounded("GGLLGG"));
}

入力

"GGLLGG"

出力

1

  1. C++で線が円に接触または交差するかどうかを確認します

    円と別の直線があるとします。私たちの仕事は、線が円に接しているか交差しているかを見つけることです。そうでない場合は、線が外側を通過します。したがって、以下のような3つの異なるケースがあります- ここでは、次の手順で解決します。これらは以下のようなものです- 中心と与えられた線の間の垂線Pを見つけます Pを半径r−と比較します rの場合、外部 P =rの場合、タッチします それ以外の場合は内部 垂直距離を取得するには、次の式を使用する必要があります(中心点は(h、k)) $$ \ frac {ah + bk + c} {\ sqrt {a ^ 2 + b ^ 2}} $$

  2. C++の正方形の外接円の面積

    この問題では、正方形の辺が与えられたときに、正方形の外接円の面積を計算します。先に進む前に、概念をよりよく理解するために基本的な定義を修正しましょう。 正方形 はすべての辺が等しい四辺形です。 外接円 円はポリゴンのすべての頂点に接しています。 エリア は、任意の2次元図形の範囲を定量的に表したものです。 正方形の外接円の面積を計算します。円と正方形のパラメータの関係を見つける必要があります。 これで、図のように、正方形のすべての頂点が円に接触しています。この図を見ると、正方形の対角線は円の直径に等しいと結論付けることができます。 これを使用して、円の直径と正方形の辺の関係を