ฉันได้รับปัญหาดังต่อไปนี้ในการให้สัมภาษณ์ (ที่ผมเคยล้มเหลวแล้วจะแก้ปัญหาไม่ได้พยายามที่จะโกงวิธีการที่ผ่านมาของฉัน): เกมเริ่มต้นด้วยจำนวนจำนวนเต็มบวก0 (เช่น0 = 1234 .) หมายเลขนี้จะถูกแปลงเป็นแทน binary และNคือจำนวนบิตที่กำหนดให้1 (เช่นA 0 = b 100 1101 0010 , N = 5 )
ผู้เล่นที่ 1เลือกหมายเลขน้อยกว่า0 B 0ต้องมีเพียงชุดเดียวบิต 1 (เช่นB 0 = ข10 0000 0000 = 512 .) ให้1 = 0 - B 0 (เช่นA 1 = 1234 - 512 = 722 = b 10 1101 0010 ) การย้ายจะใช้ได้ถ้าB 0ตอบสนองข้อ จำกัด ก่อนหน้านี้และหากจำนวนบิตที่ตั้งอยู่ใน1ยังคงเท่ากับ N
ผู้เล่น 2ดำเนินการต่อจากโดยเลือกB 1 ที่ถูกต้องจากนั้นผู้เล่น 1ดำเนินการต่อจากA 2และอื่น ๆ ผู้เล่นเสียถ้าพวกเขาไม่มีการเคลื่อนไหวที่ถูกต้องเหลืออยู่
สมมติว่าผู้เล่นทั้งสองเล่นอย่างดีที่สุดกำหนดผู้เล่นที่ชนะโดยใช้วิธีการที่มีประสิทธิภาพพอสมควร (ในคำจำกัดความปัญหาของฉันข้อ จำกัด ในเรื่องนี้คือโปรแกรมจะต้องสามารถส่งมอบโซลูชันสำหรับตัวเลขอินพุตสองสามล้านตัวที่พอดีกับเลขจำนวนเต็ม 32- บิตที่เซ็นชื่อ) นั่นคือโซลูชันไม่จำเป็นต้องเป็น วิเคราะห์อย่างเต็มที่
ความสนใจส่วนตัวของฉันที่นี่คือการพิจารณาว่าความคาดหวังของฉันที่จะได้พบและใช้งานโซลูชันที่ถูกต้องโดยไม่มีการตอบกลับเกี่ยวกับความถูกต้องใน 120 นาทีที่ฉันได้รับนั้นสมเหตุสมผลหรือไม่ หรือถ้านี่เป็นหนึ่งในคำถาม "มาดูกันว่าพวกเขาเคยเห็นปริศนานี้มาก่อนหรือไม่"
ฉันล้มเหลวเพราะฉันเลือกที่จะใช้สิ่งที่ดูเหมือนว่าเป็นกลยุทธ์ที่สมเหตุสมผลซึ่งให้ผลลัพธ์ที่ถูกต้องสำหรับกรณีทดสอบบางอย่างที่ฉันได้รับก่อนหน้าเสียเวลามากเกินไปในการทำสิ่งนี้อย่างรวดเร็วและลงเอยด้วยการไม่ถูกต้อง ผลผลิตเต็มเมื่อเวลาของฉันหมด
ในการหวนกลับฉันควรใช้การค้นหาที่โหดเหี้ยมและจดจำวิธีแก้ปัญหาบางส่วนสำหรับตัวเลขเริ่มต้นขนาดเล็ก แต่ปัญหาหลังเหตุการณ์อยู่เสมอ 20/20 ฉันอยากรู้อยากเห็น แต่ถ้ามีวิธีการร่วมกันที่แตกต่างกันที่ eluded ฉันเป็น flunkee