在 C++ 中确定一条直线将穿过的单位面积的方块数?
c++server side programmingprogramming
目标是确定给定两个端点 (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) 函数采用四个值 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