在 C++ 中如何确定一条直线穿过多少个单位面积的正方形?


目标是确定一条给定两个端点 (x1,y1) 和 (x2,y2) 的直线将穿过多少个正方形。

为了找到我们的直线穿过多少个正方形,我们需要找到:x 坐标的差 (dx) = x2-x1,y 坐标的差 (dy) = y2-y1,将 dx 和 dy 相加并减去它们的 最大公约数 (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 相加并减去 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<<"The line passes through "<<unitSquares(x1, y1, x2, y2)<<" squares ";
   return 0;
}

输出

以上代码将产生以下输出:

The line passes through 9 squares

更新于: 2021年1月16日

68 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告