C ++で線が通過する単位面積の平方数を決定しますか?
目的は、2つの端点(x1、y1)と(x2、y2)を指定して、線が通過する平方の数を決定することです。
ラインが通過する平方の数を見つけるには、次を見つける必要があります。xポイント間の差(dx)=x2-x1、yポイント間の差(dy)=y2-y1、dxとdyを加算し、それらのgcd(結果)=dx + dy – gcd(dx、dy)。
unitSquares(int x1、int y1、int x2、int y2)関数は、4つの値x1、y1およびx2、y2を取ります。 x2とx1の絶対差、およびy2とy1の絶対差が計算されます。 dxとdyは、dx、dyのgcdに加算および減算されます。結果はansに保存され、印刷のためにmainに返されます。
int unitSquares(int x1, int y1, int x2, int y2){ int dx = abs(x2 - x1); int dy = abs(y2 - y1); int ans = dx + dy - __gcd(dx, dy); return ans; }
例
次の実装を見て、線が通過する平方単位面積の数を決定しましょう。
#include<iostream> #include <algorithm> using namespace std; int unitSquares(int x1, int y1, int x2, int y2){ int dx = abs(x2 - x1); int dy = abs(y2 - y1); int ans = dx + dy - __gcd(dx, dy); return ans; } int main(){ int x1 = 3, y1 = 3, x2 = 12, y2 = 6; cout<<"The line passes through "<<unitSquares(x1, y1, x2, y2)<<" squares "; return 0; }
出力
上記のコードは次の出力を生成します-
The line passes through 9 squares
-
C++で1回の移動でビショップがアクセスできる正方形の総数を数えます
8 X 8グリッドで表されるチェス盤では、行と列の位置の形式でビショップの位置が与えられます。目標は、ビショップが1回の移動で訪問できる正方形の総数を見つけることです。ビショップはすべての方向に移動できることがわかっています(対角線上で左上/下および右上/下)。 例 入力 row = 5, column = 4 出力 Count of total number of squares that can be visited by Bishop in one move are: 13 説明 As shown in above figure the squares that Bishop
-
合計がC++で均等になるように、配列に最小数を追加しますか?
いくつかの番号を持つ配列があるとします。要素の合計を均等にするために、それに追加される数値の最小数を指定する必要があります。数値は0より大きくなければなりません。したがって、要素の合計が奇数の場合は1を加算しますが、合計がすでに偶数の場合は2を加算して偶数にします。 アルゴリズム addMinNumber(arr) begin s := 0 for each element e from arr, do s := e + s done if s i