Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 선이 통과할 단위 면적의 제곱 수를 결정합니까?

<시간/>

목적은 주어진 두 끝점(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의 gcd에서 dx와 dy를 더하고 뺍니다. 결과는 ans에 저장되고 인쇄를 위해 기본으로 반환됩니다.

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