สมมติว่าเรามีอาร์เรย์ที่เรียกว่า price โดยที่ price[i] แทนราคาของไอเท็ม ith ในร้าน มีข้อเสนอพิเศษเกิดขึ้นหากเราซื้อไอเท็ม ith แล้วเราจะได้ส่วนลดเทียบเท่ากับราคา[j] โดยที่ j เป็นดัชนีขั้นต่ำที่ j> i และราคาของ jth น้อยกว่าหรือเท่ากับราคาของ ith รายการ (เช่น ราคา[j] <=ราคา[i]) มิฉะนั้น เราจะไม่รับส่วนลดใดๆ เลย เราต้องหาอาร์เรย์ที่องค์ประกอบ ith เป็นราคาสุดท้ายที่เราจะจ่ายสำหรับรายการ ith ของร้านค้าโดยพิจารณาจากส่วนลดพิเศษ
ดังนั้น หากอินพุตเหมือนกับราคา =[16,8,12,4,6] ผลลัพธ์จะเป็น [8, 4, 8, 4, 6] เนื่องจากราคาของ item0 คือ 16 ดังนั้นเราจะได้ ส่วนลดเทียบเท่าราคา[1]=8 ดังนั้นราคาสุดท้ายจะเป็น 8 - 4 =4 สำหรับรายการ 1 ราคา[1] คือ 8 เราจะได้ส่วนลดเทียบเท่าราคา[3]=2 ดังนั้น สุดท้าย ราคาที่เราจะจ่ายคือ 8 - 4 =4 สำหรับรายการที่ 2 ที่มีราคา[2] คือ 12 และเราจะได้มูลค่าส่วนลดเท่ากับราคา[3] =4 ดังนั้นราคาสุดท้ายที่เราจะจ่ายคือ 12 - 4 =8. และสำหรับรายการ 3 และ 4 เราจะไม่รับส่วนลดใดๆ
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
สำหรับผมอยู่ในช่วง 0 ถึงขนาดของราคาทำ
-
สำหรับ j ในช่วง i+1 ถึงขนาดของราคา ให้ทำ
-
ถ้าราคา[i]>=ราคา[j] แล้ว
-
ราคา[i] :=ราคา[i] - ราคา[j]
-
ออกจากวง
-
-
มิฉะนั้น
-
เจ :=เจ + 1
-
-
-
-
ราคาส่งกลับ
ตัวอย่าง (Python)
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
def solve(prices): for i in range(len(prices)): for j in range(i+1,len(prices)): if(prices[i]>=prices[j]): prices[i]-=prices[j] break else: j+=1 return prices prices = [16,8,12,4,6] print(solve(prices))
อินพุต
[16,8,12,4,6]
ผลลัพธ์
[8, 4, 8, 4, 6]