วัตถุประสงค์คือเพื่อกำหนดจำนวนช่องสี่เหลี่ยมที่เส้นจะผ่านจุดปลายสองจุด (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 ถูกบวกและลบออกจาก 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<<"The line passes through "<<unitSquares(x1, y1, x2, y2)<<" squares "; return 0; }
ผลลัพธ์
รหัสข้างต้นจะสร้างผลลัพธ์ต่อไปนี้ -
The line passes through 9 squares