หลายเดือนที่ผ่านมาฉันมีคำถามนี้เป็นปริศนาการคัดกรองเบื้องต้นสำหรับการสัมภาษณ์ เมื่อเร็ว ๆ นี้เมื่อคิดเกี่ยวกับเนื้อหาบล็อกมันโผล่ในหัวของฉันเป็นตัวอย่างที่ดีที่จะใช้สำหรับการแก้ปัญหาการทำงาน ฉันจะโพสต์วิธีแก้ไขปัญหานี้ทันทีที่ฉันเขียนบทความในบล็อกเสร็จ
หมายเหตุ: คำถามนี้ถูกถามใน StackOverflow หนึ่งปีที่ผ่านมาและถูกลดระดับลงหลังจากคำตอบ (ไม่ถูกต้อง) สองสามข้อ ฉันคิดว่ามันถูกลดระดับลงเนื่องจากการสัมภาษณ์ที่ชัดเจนหรือคำถามการบ้าน คำตอบของเราที่นี่ควรเป็นรหัสกอล์ฟลึกพอสำหรับคนที่ไม่ต้องคิดใช้!
ในการแข่งขันคุณเดิมพันโดยใช้กลยุทธ์ต่อไปนี้ เมื่อใดก็ตามที่คุณแพ้การเดิมพันคุณจะเพิ่มมูลค่าของการเดิมพันในรอบถัดไป เมื่อใดก็ตามที่คุณชนะการเดิมพันรอบต่อไปจะเป็นหนึ่งดอลลาร์ คุณเริ่มรอบโดยการเดิมพันหนึ่งดอลลาร์
ตัวอย่างเช่นหากคุณเริ่มต้นด้วย 20 ดอลลาร์และคุณชนะการเดิมพันในรอบแรกแพ้การเดิมพันในสองรอบถัดไปจากนั้นชนะการเดิมพันในรอบที่สี่คุณจะจบด้วย 20 + 1-1-2 +4 = 22 ดอลลาร์
คุณคาดว่าจะทำให้ฟังก์ชันเสร็จสมบูรณ์g
ซึ่งใช้เวลาสองข้อโต้แย้ง:
- อาร์กิวเมนต์แรกคือเลขจำนวนเต็ม
a
ซึ่งเป็นเงินเริ่มต้นที่เรามีเมื่อเราเริ่มเดิมพัน r
อาร์กิวเมนต์ที่สองเป็นสตริง ตัวละครของผลลัพธ์ที่ได้จะเป็น 'W' (ชนะ) หรือ 'L' (แพ้) แสดงถึงผลลัพธ์ของรอบที่ ith
ฟังก์ชั่นของคุณควรคืนจำนวนเงินที่คุณจะได้รับหลังจากเล่นรอบทั้งหมด
หาก ณ จุดหนึ่งคุณไม่มีเงินเพียงพอในบัญชีของคุณเพื่อครอบคลุมมูลค่าของการเดิมพันคุณต้องหยุดและคืนเงินที่คุณมี ณ จุดนั้น
วิ่งตัวอย่าง
1st round - Loss: 15-1 = 14
2nd round - Loss: 14-2 = 12 (Bet doubles)
3rd round - Loss: 12-4 = 8
4th round - Win: 8 + 8 = 16
5th round - Loss:16-1 = 15 (Since the previous bet was a win, this bet has a value of 1 dollar)
6th round - Loss: 15-2 = 13
7th round - Loss: 13-4 = 9
8th round - Loss: 9-8 = 1
ฟังก์ชันจะส่งคืน1
ในกรณีนี้
ผู้ชนะจะถูกกำหนดโดยจำนวนอย่างน้อยตัวละครภายในของคำนิยามฟังก์ชั่นโดยนัย ให้ความร่วมมือตามภาษาหากต้องการ ฉันรู้ว่าฉันสามารถปรับปรุงได้!