Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ค้นหาว่าคนสองคนพบกันหลังจากกระโดดเท่ากันใน C++ . หรือไม่


ในปัญหานี้ เราได้รับจำนวนเต็มสี่ตัวที่แสดงถึงจุดเริ่มต้นและการกระโดดที่แต่ละคนใช้ในการแข่งขัน งานของเราคือ ค้นหาว่าคนสองคนเคยเจอกันหรือไม่หลังจากกระโดดเท่ากัน

คำอธิบายปัญหา: ในที่นี้เราต้องตรวจสอบว่าคนสองคนเริ่มต้นที่จุด p1 และ p2 กระโดด j1 และ j2 จะอยู่ถึงจุดหนึ่งในเส้นทางหรือไม่

มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน

ป้อนข้อมูล: p1 =5, p2 =9, j1 =4, j2 =2

ผลลัพธ์: ใช่

คำอธิบาย:

หลังจากกระโดดครั้งแรก p1 =9, p2 =11
หลังจากกระโดดครั้งที่สอง p1 =13, p2 =13

แนวทางแก้ไข:

สำหรับการพบกันในบางจุด คนทั้งสองจะต้องกระโดดไกลกัน นี่คือเงื่อนไขบางประการที่จะต้องปฏิบัติตามเพื่อตรวจสอบว่าการพบปะผู้คนเป็นไปได้หรือไม่

ถ้า p1> p2 แล้ว s1 ต้องน้อยกว่า s2

และ ( (p2 - p1) % (s1 - s2) ) ==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