สมมติว่าเรามีตัวเลขสี่ตัว p, a, b และ c มีสระว่ายน้ำและนักว่ายน้ำสามคนอยู่ที่นั่น พวกเขาใช้เวลา a, b และ c นาทีเพื่อข้ามสระและกลับมาตามลำดับ ดังนั้น นักว่ายน้ำคนแรกจะอยู่ทางด้านซ้ายของสระหลังจากเวลา 0, a, 2a, 3a,... นาทีหลังจากเวลาเริ่มต้น ที่สองจะอยู่ที่ 0, b, 2b, 3b,... นาที และสำหรับอันที่สาม 0, c, 2c, 3c, ... ถ้าเราไปที่สระหลังจาก p นาทีพวกเขาเริ่มว่ายน้ำแล้วเราต้องหาวิธี เราต้องรออย่างน้อยที่สุดเพื่อให้ได้นักว่ายน้ำที่ด้านซ้ายของสระอย่างน้อยหนึ่งคน
ดังนั้นหากอินพุตเป็นเหมือน p =2; ก =6; ข =10; c =9 แล้วเอาท์พุตจะเป็นเพราะตอนตี 2 เราอยู่ใกล้สระ นักว่ายน้ำคนแรกจะกลับมาตอน 6 โมง ก็เลยต้องรออีก 4 หน่วย
ขั้นตอน
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
(decrease p by 1) return minimum of (a - (p mod a + 1)), (b - (p mod b + 1)) and (c - (p mod c + 1))
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include <bits/stdc++.h> using namespace std; int solve(int p, int a, int b, int c) { p--; return min(a - (p % a + 1), min(b - (p % b + 1), c - (p % c + 1))); } int main() { int p = 2; int a = 6; int b = 10; int c = 9; cout << solve(p, a, b, c) << endl; }
อินพุต
2, 6, 10, 9
ผลลัพธ์
4