โจทย์
ได้รับจุดเริ่มต้น p1, p2 และระยะกระโดด j1, j2 ทางเราต้อง ตรวจสอบว่าสองคนจะพบกันได้หรือไม่หลังจากกระโดดจำนวนครั้งเท่ากัน
ตัวอย่าง
Input: p1=5, p2=9, j1=4, j2=2
Output: Yes
อธิบาย: กระโดดครั้งที่ 1: p1=9, p2=11; ครั้งที่ 2: p1=13, p2=13 -> พบกัน
แนวทางแก้ปัญหา
เงื่อนไขการพบกัน:
- ถ้า p1 > p2 ต้องมี j1 < j2 (คนหลังต้องกระโดดยาวกว่า)
- ระยะห่างต้องหารด้วยความต่างของระยะกระโดดลงตัว:
(p2-p1) % (j1-j2) == 0
โปรแกรมตัวอย่าง
#include <iostream>
using namespace std;
bool WillMeet(int p1, int j1, int p2, int j2) {
return ((j1 > j2 && ((p2 - p1) % (j1 - j2)) == 0) ||
(j2 > j1 && ((p1 - p2) % (j2 - j1)) == 0));
}
int main() {
int p1 = 5, j1 = 4, p2 = 9, j2 = 2;
if (WillMeet(p1, j1, p2, j2)) cout << "Both will meet at some point";
else cout << "Both will not meet at any point";
return 0;
}
ผลลัพธ์
Both will meet at some point