Cho 4 số nguyên: vị trí bắt đầu p1, p2 và độ nhảy j1, j2. Nhiệm vụ: kiểm tra hai người có bao giờ gặp nhau sau cùng số lần nhảy.
Mô tả: Kiểm tra xem hai người bắt đầu tại p1, p2 nhảy j1, j2 có bao giờ trùng vị trí không.
Ví dụ:
Đầu vào: p1 = 5, p2 = 9, j1 = 4, j2 = 2
Đầu ra: Yes
Giải thích:
Sau nhảy 1: p1=9, p2=11
Sau nhảy 2: p1=13, p2=13 -> gặp nhau
Phương pháp giải
Điều kiện gặp nhau:
- Nếu p1 > p2 thì j1 < j2 (người sau nhảy xa hơn).
- (p2 - p1) % (j1 - j2) == 0 (khoảng cách chia hết cho chênh lệch bước nhảy).
Chương trình minh họa
Ví dụ
#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;
}
Kết quả
Both will meet at some point