สมมุติว่าเรามีเลขฐานสองที่แทนคะแนนของการแข่งขันวอลเลย์บอล เราต้องหาผู้ชนะการแข่งขันตามเงื่อนไขต่อไปนี้ –
-
มีสองทีมที่เล่นกันเอง และทีมที่ทำคะแนนได้ 15 คะแนนก่อนจะเป็นผู้ชนะ ยกเว้นเมื่อทั้งสองทีมมีคะแนนถึง 14 คะแนน
-
เมื่อทั้งสองทีมมีคะแนนถึง 14 แต้มในขณะนั้น ทีมที่นำสองแต้มจะเป็นผู้ชนะ
จากสตริงไบนารีที่กำหนด 0 หมายถึงทีมเสียคะแนนและ 1 หมายถึงทีมชนะคะแนน เราต้องเช็คก่อนว่าทีมชนะหรือแพ้นัดนี้
ดังนั้น หากอินพุตเป็น like score ="1001100110111001110011011" ผลลัพธ์จะเป็นทีมที่ชนะ
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
score_cnt :=[0,0]
-
สำหรับผมอยู่ในช่วง 0 ถึงขนาดของคะแนน ทำ
-
pos :=ASCII ของ (score[i]) - ASCII ของ ('0')
-
score_cnt[pos] :=score_cnt[pos] + 1
-
ถ้า score_cnt[0] เหมือนกับ n และ score_cnt[1] − n - 1 แล้ว
-
กลับ "ทีมแพ้"
-
-
ถ้า score_cnt[1] เหมือนกับ n และ score_cnt[0]
-
ส่งคืน "ทีมชนะ"
-
-
ถ้า score_cnt[0] เหมือนกับ n - 1 และ score_cnt[1] เหมือนกับ n - 1 แล้ว
-
score_cnt[0] :=0
-
score_cnt[1] :=0
-
ออกจากวง
-
-
-
ผม :=ผม + 1
-
เพราะฉันอยู่ในช่วง i ถึงขนาดของคะแนน ทำ
-
pos :=ASCII ของ (score[i]) - ASCII ของ ('0')
-
score_cnt[pos] :=score_cnt[pos] + 1
-
ถ้า |score_cnt[0] - score_cnt[1]| เท่ากับ 2 แล้ว
-
ถ้า score_cnt[0]> score_cnt[1] แล้ว
-
กลับ "ทีมแพ้"
-
-
มิฉะนั้น
-
ส่งคืน "ทีมชนะ"
-
-
-
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
def predictWinner(score, n): score_cnt = [0,0] for i in range(len(score)): pos = ord(score[i]) - ord('0') score_cnt[pos] += 1 if (score_cnt[0] == n and score_cnt[1] < n - 1): return "Team lost" if (score_cnt[1] == n and score_cnt[0] < n - 1): return "Team won" if (score_cnt[0] == n - 1 and score_cnt[1] == n - 1): score_cnt[0] = 0 score_cnt[1] = 0 break i += 1 for i in range(i, len(score)): pos = ord(score[i]) - ord('0') score_cnt[pos] += 1 if (abs(score_cnt[0] - score_cnt[1]) == 2): if (score_cnt[0] > score_cnt[1]): return "Team lost" else: return "Team won" score = "1001010101111011101111" n = 15 print(predictWinner(score, n))
อินพุต
"1001010101111011101111"
ผลลัพธ์
Team won