Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมหาจำนวนคนที่ได้รับซองอาหารโดยใช้ Python


สมมติว่าในการประชุมมีคนสองประเภท คนประเภทแรกชอบรับประทานอาหารกลางวันแบบมังสวิรัติ และอีกประเภทหนึ่งชอบรับประทานอาหารกลางวันที่ไม่ใช่มังสวิรัติ แต่มีแพ็คเก็ตจำนวนจำกัด และหากผู้ทานมังสวิรัติได้รับแพ็คเก็ตที่ไม่ใช่มังสวิรัติหรือในทางกลับกัน พวกเขาจะไม่เอาแพ็กเก็ตนั้นและรอจนกว่าจะได้แพ็กเก็ตที่ต้องการ ดังนั้น แพ็กเก็ตและผู้คนสองประเภทที่แตกต่างกันจึงถูกระบุว่าเป็น 0 สำหรับผู้ทานมังสวิรัติ และ 1 สำหรับผู้ที่ไม่ใช่มังสวิรัติ ตอนนี้เราได้รับอาร์เรย์สองชุด โดยชุดหนึ่งประกอบด้วยจำนวน n ของแพ็คเก็ตอาหารแสดงด้วย 0 และ 1 และอีกอาร์เรย์หนึ่งมีคิวจำนวน m คน และการตั้งค่าของพวกเขาจะแสดงด้วย 0 และ 1 ดังนั้นหากบุคคลหนึ่งไม่ได้รับ แพ็กเก็ตที่ต้องการ พวกเขากลับเข้าคิวอีกครั้งในตอนท้ายและรอแพ็กเก็ตที่ต้องการ ดังนั้น เราต้องค้นหาจำนวนคนที่ไม่มีถุงอาหารเพื่อที่เราจะได้จัดชุดที่ต้องการได้

ดังนั้น หากอินพุตเป็นเหมือนคน =[0,1,1,0] แพ็กเก็ต =[0, 1, 0, 0] ผลลัพธ์จะเป็น 1

ดังนั้น คนสองคนจึงชอบอาหารที่ไม่ใช่ผัก และมีเพียงห่อเดียวที่ไม่ใช่ผัก คนแรกในแถวที่ไม่ต้องการผักจะได้รับแพ็คเก็ตนั้นและอีกคนรอเพราะไม่มีแพ็คเก็ตอื่นที่ไม่ใช่ผัก ดังนั้นผลลัพธ์คือ 1

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • temp_arr :=รายการใหม่ที่มีค่า 0 และ 0

  • สำหรับแต่ละคนในคนทำ

    • temp_arr[บุคคล] :=temp_arr[บุคคล] + 1

  • k :=0

  • ในขณะที่ k <ขนาดของแพ็กเก็ต ทำ

    • ถ้า temp_arr[packets[k]]>0 แล้ว

      • temp_arr[packets[k]] :=temp_arr[packets[k]] - 1

    • มิฉะนั้น

      • ออกจากวง

    • k :=k + 1

  • ขนาดส่งคืนของแพ็กเก็ต - k

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

def solve(people, packets):
   temp_arr = [0,0]
   for person in people:
      temp_arr[person] += 1
   k = 0
   while k < len(packets):
      if temp_arr[packets[k]]>0:
         temp_arr[packets[k]]-=1
      else:
         break
      k += 1
   return len(packets) - k

print(solve([0,1,1,0], [0, 1, 0, 0]))

อินพุต

[0,1,1,0], [0, 1, 0, 0]

ผลลัพธ์

1