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

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

ปัญหา

มีคน 2 ประเภท: ชอบมังสวิรัติ (0) และไม่มังสวิรัติ (1) มีกล่องอาหารจำกัด คนจะไม่รับกล่องที่ไม่ตรงชอบ จะแทรกคิวท้าย จนกว่าจะได้กล่องที่ชอบ หาจำนวนคนที่ไม่ได้กล่องอาหาร

ตัวอย่าง

people=[0,1,1,0], packets=[0,1,0,0] → ผลลัพธ์ 1 (มีคนชอบไม่มังสวิรัติ 2 คน แต่กล่องไม่มังสวิรัติแค่ 1 กล่อง → คนหนึ่งรอตลอด)

ขั้นตอนการแก้ปัญหา

  1. temp_arr := [0,0] นับจำนวนคนแต่ละประเภท
  2. นับ people ใส่ temp_arr
  3. k := 0
  4. بينما k < len(packets):
    • ถ้า temp_arr[packets[k]] > 0: temp_arr[packets[k]] -= 1
    • มิฉะนั้น: break
    • k += 1
  5. คืน len(packets) - k

การนำไปใช้งาน (Python)

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