สมมติว่าเราได้รับอาร์เรย์ 3 อาร์เรย์ ได้แก่ curr_a, curr_b, และ conv_rate อาร์เรย์แรกและอาร์เรย์ที่สองมีชื่อสกุลเงิน อาร์เรย์ conv_rate มีอัตราแลกเปลี่ยนจาก curr_a[i] ไป curr_b[i] กำหนดสกุลเงินต้นทาง src และปลายทาง dest เราต้องหาอัตราแลกเปลี่ยนจาก src ไป dest คืนค่าผลลัพธ์ หากไม่สามารถทำได้คืนค่า 0
เช่น ถ้าอินพุตคือ src = "INR", dest = "JPY", curr_a = ["INR", "GBP", "EUR"], curr_b = ["GBP", "EUR", "JPY"], conv_rate = [0.009, 1.17, 129.67] ผลลัพธ์จะเป็น 1.3654250999999997
ขั้นตอนการแก้ปัญหา
temp := แมปใหม่ค่าเริ่มต้น 0,temp[src] := 1i := 0,p := True- ในขณะที่
pและi <= ขนาดของ temp:p := False- สำหรับแต่ละ
x, y, zในzip(curr_a, curr_b, conv_rate):- ถ้า
temp[x] * z > temp[y]และไม่เป็นศูนย์:temp[y] := temp[x] * zp := True
- ถ้า
i := i + 1
- ถ้า
i <= ขนาดของ tempคืนค่าtemp[dest]มิฉะนั้น-1
ตัวอย่างการใช้งาน
from collections import defaultdict
def solve(src, dest, curr_a, curr_b, conv_rate):
temp = defaultdict(int)
temp[src] = 1
i = 0
p = True
while p and i <= len(temp):
p = False
for x, y, z in zip(curr_a, curr_b, conv_rate):
if temp[x] * z > temp[y]:
temp[y] = temp[x] * z
p = True
i += 1
return temp[dest] if i <= len(temp) else -1
print(solve("INR", "JPY", ["INR", "GBP", "EUR"], ["GBP", "EUR", "JPY"], [0.009, 1.17, 129.67]))
อินพุต
"INR", "JPY", ["INR", "GBP", "EUR"], ["GBP", "EUR", "JPY"], [0.009, 1.17, 129.67]
เอาต์พุต
1.3654251