サークル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
-
C++で線が円に接触または交差するかどうかを確認します
円と別の直線があるとします。私たちの仕事は、線が円に接しているか交差しているかを見つけることです。そうでない場合は、線が外側を通過します。したがって、以下のような3つの異なるケースがあります- ここでは、次の手順で解決します。これらは以下のようなものです- 中心と与えられた線の間の垂線Pを見つけます Pを半径r−と比較します rの場合、外部 P =rの場合、タッチします それ以外の場合は内部 垂直距離を取得するには、次の式を使用する必要があります(中心点は(h、k)) $$ \ frac {ah + bk + c} {\ sqrt {a ^ 2 + b ^ 2}} $$
-
C++の正方形の外接円の面積
この問題では、正方形の辺が与えられたときに、正方形の外接円の面積を計算します。先に進む前に、概念をよりよく理解するために基本的な定義を修正しましょう。 正方形 はすべての辺が等しい四辺形です。 外接円 円はポリゴンのすべての頂点に接しています。 エリア は、任意の2次元図形の範囲を定量的に表したものです。 正方形の外接円の面積を計算します。円と正方形のパラメータの関係を見つける必要があります。 これで、図のように、正方形のすべての頂点が円に接触しています。この図を見ると、正方形の対角線は円の直径に等しいと結論付けることができます。 これを使用して、円の直径と正方形の辺の関係を