สมมุติว่าเรามีเลขฐานสองที่แทนคะแนนของการแข่งขันวอลเลย์บอล เราต้องหาผู้ชนะการแข่งขันตามเงื่อนไขต่อไปนี้ –
-
มีสองทีมที่เล่นกันเอง และทีมที่ทำคะแนนได้ 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