สมมติว่าเรามีตัวเลขสองตัว c และ d Amal มีสองตัวเลข a และ b ในตอนแรกทั้งคู่เป็นศูนย์ Amal ต้องการดำเนินการบางอย่างกับพวกเขา ก่อนดำเนินการแต่ละอย่าง จะมีการเลือกจำนวนเต็มบวก k ซึ่งจะถูกใช้เพื่อดำเนินการอย่างใดอย่างหนึ่งต่อไปนี้ -
-
เติม k ให้ทั้ง a และ b หรือ
-
บวกเลข k กับ a แล้วลบ k ออกจาก b หรือ
-
บวกเลข k กับ b แล้วลบ k ออกจาก a
เราต้องหาจำนวนขั้นต่ำของการดำเนินการที่จำเป็นในการทำให้ a และ b เท่ากับ c ตามลำดับ หากทำไม่ได้ ให้คืนค่า -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) is odd, then: return -1 otherwise when c is same as 0 and d is same as 0, then: return 0 otherwise when c is same as d, then: 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