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

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

  1. 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

  2. 合計がC++で均等になるように、配列に最小数を追加しますか?

    いくつかの番号を持つ配列があるとします。要素の合計を均等にするために、それに追加される数値の最小数を指定する必要があります。数値は0より大きくなければなりません。したがって、要素の合計が奇数の場合は1を加算しますが、合計がすでに偶数の場合は2を加算して偶数にします。 アルゴリズム addMinNumber(arr) begin    s := 0    for each element e from arr, do       s := e + s    done    if s i