สมมติว่าเรามีตัวเลขสองจำนวน c และ d อมลมี a และ b เริ่มต้นเป็น 0 ทั้งคู่ ต้องการดำเนินการ ก่อนแต่ละรอบ เลือกจำนวนเต็มบวก k ใช้ทำหนึ่งใน:
- บวก k ให้ a และ b ทั้งคู่
- บวก k ให้ a ลบ k จาก b
- บวก k ให้ b ลบ k จาก a
หาจำนวนรอบน้อยสุดทำให้ a,b เท่ากับ c,d ถ้าไม่ได้ส่ง -1
เช่น ถ้าอินพุตคือ c = 3; d = 5 เอาต์พุตจะเป็น 2 เพราะ k=1 ได้ (1,1), k=8 ได้ (-7,9), k=7 ได้ (0,2), k=3 ได้ (3,5)
ขั้นตอนการแก้ปัญหา
if (c ^ d) เป็นเลขคี่:
return -1
else if c == 0 และ d == 0:
return 0
else if c == d:
return 1
otherwise:
return 2
ตัวอย่างโค้ด
#include <bits/stdc++.h>
using namespace std;
int solve(int c, int d) {
if ((c ^ d) & 1) return -1;
else if (c == 0 && d == 0) return 0;
else if (c == d) return 1;
else return 2;
}
int main() {
int c = 3;
int d = 5;
cout << solve(c, d) << endl;
}
อินพุต
3, 5
เอาต์พุต
2