在C++中确定一条线将通过的单位面积的平方数?

目标是确定一条线将通过给定两个端点 (x1,y1) 和 (x2,y2) 的方格数。

要找到我们的线通过的正方形数,我们需要找到:x 点之间的差值 (dx) = x2-x1,y 点之间的差值 (dy) = y2-y1,将 dx 和 dy 相加并减去他们的 gcd (result) = dx + dy – gcd(dx,dy)。

unitSquares(int x1, int y1, int x2, int y2) 函数采用四个值 x1,y1 和 x2,y2。计算 x2 和 x1 之间的绝对差值以及 y2 和 y1 之间的绝对差值。从 dx,dy 的 gcd 中添加和减去 dx 和 dy。结果存入 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<<"线穿过 "<<unitSquares(x1, y1, x2, y2)<<" squares ";
   return 0;
}
输出结果

上面的代码将产生以下输出 -

线穿过 9 squares