1. บทนำ
ผู้เขียนพบคำถามดังกล่าวในการแข่งขันอัลกอริทึมที่มหาวิทยาลัย ตอนนี้ฉันจะแบ่งปันกับคุณ: มีเหรียญเงินแปดเหรียญ Abcdefgh และหนึ่งในนั้นเป็นที่รู้กันว่าเป็นสกุลเงินปลอมซึ่งแตกต่างจากสกุลเงินจริง แต่ฉันไม่รู้ว่ามันเบาหรือหนักกว่า วิธีการใช้ยอดคงเหลือในการตัดสินใจว่าเหรียญใดเป็นสกุลเงินปลอมที่มีจำนวนขั้นต่ำของการเปรียบเทียบและฉันก็รู้ว่าสกุลเงินปลอมนั้นเบาหรือหนักกว่าสกุลเงินจริง
2. การวิเคราะห์
หากคำถามนี้เป็นเพียงการแก้ปัญหาสกุลเงินปลอมที่ง่ายมากปัญหาไม่ซับซ้อนมากและคุณต้องย้อนกลับไปและกลับมาอีกครั้งเพื่อให้ได้ผลลัพธ์ เราจำเป็นต้องใช้ขั้นตอนน้อยที่สุดในการจัดการกับปัญหาของปัญหา! - -
เมื่อเปรียบเทียบกับปัญหาโครงสร้างข้อมูลก่อนหน้านี้มีการเรียกซ้ำและการย้อนรอย วันนี้เราอาจต้องติดต่อกับแนวคิดใหม่ที่เรียกว่าต้นไม้ ตามชื่อที่แนะนำโครงสร้างตัวเลขหมายความว่าแผนภาพการวิเคราะห์ของเราเป็นเหมือนต้นไม้ที่มีข้อมูลต่าง ๆ เช่นโหนดสาขา โครงสร้างต้นไม้เป็นบทที่ใหญ่กว่าในโครงสร้างข้อมูลไม่ใช่ในการสนทนาของเรา ในคำถามนี้เราจะแนะนำโมเลกุลเล็ก ๆ ของต้นไม้ต้นไม้ตัดสินใจ
ก่อนอื่นสร้างแบบจำลองทางคณิตศาสตร์สำหรับการแก้เหรียญเงินแปดเหรียญ สถานการณ์ง่าย ๆ เป็นเช่นนี้ เราตั้งชื่อ Silver Coins ABCDEFG ฯลฯ ในทางกลับกันเราเปรียบเทียบ A+B+C และ D+E+F ถ้าเท่ากันสกุลเงินปลอมจะต้องเป็น g หรือ h ก่อนอื่นเราเปรียบเทียบว่าอันไหนที่หนักกว่า G หรือ H หาก G หนักกว่าให้เปรียบเทียบกับ A (A คือสกุลเงินจริง) ถ้า g เท่ากับ a, g คือสกุลเงินจริงแล้ว h คือสกุลเงินปลอม เนื่องจาก H เบากว่า G และ G เป็นสกุลเงินจริงน้ำหนักของสกุลเงินปลอมจึงเบากว่าสกุลเงินจริง
เกิดอะไรขึ้นถ้ามันไม่เท่ากัน? กรณีคืออะไร? เราจะเปรียบเทียบสาขาในทางกลับกันจนกว่าเราจะได้รับคำตอบสุดท้าย!
3. ตัวอย่างไดอะแกรม
จากการวิเคราะห์ข้างต้นเราสามารถมีแผนภาพต้นไม้การตัดสินใจที่สมบูรณ์:
4. รหัส
เหรียญระดับสาธารณะ {INT ส่วนตัว [] เหรียญ; เหรียญสาธารณะ () {coins = new int [8]; สำหรับ (int i = 0; i <8; i ++) เหรียญ [i] = 10; } โมฆะสาธารณะ setFake (น้ำหนัก int) {เหรียญ [(int) (math.random () * 7)] = น้ำหนัก; } โมฆะสาธารณะปลอม () {ถ้า (เหรียญ [0]+เหรียญ [1]+เหรียญ [2] == เหรียญ [3]+เหรียญ [4]+เหรียญ [5]) {ถ้า (เหรียญ [6]> เหรียญ [7]) เปรียบเทียบ (6, 7, 0); อื่นเปรียบเทียบ (7, 6, 0); } อื่นถ้า (เหรียญ [0]+เหรียญ [1]+เหรียญ [2]> เหรียญ [3]+เหรียญ [4]+เหรียญ [5]) {ถ้า (เหรียญ [0]+เหรียญ [3] == เหรียญ [1]+เหรียญ [4]) เปรียบเทียบ (2, 5, 0); อื่นถ้า (เหรียญ [0]+เหรียญ [3]> เหรียญ [1]+เหรียญ [4]) เปรียบเทียบ (0, 4, 1); ถ้า (เหรียญ [0]+เหรียญ [3] <เหรียญ [1]+เหรียญ [4]) เปรียบเทียบ (1, 3, 0); } อื่นถ้า (เหรียญ [0]+เหรียญ [1]+เหรียญ [2] <เหรียญ [3]+เหรียญ [4]+เหรียญ [5]) {ถ้า (เหรียญ [0]+เหรียญ [3] == เหรียญ [1]+เหรียญ [4]) เปรียบเทียบ (5, 2, 0); อื่นถ้า (เหรียญ [0]+เหรียญ [3]> เหรียญ [1]+เหรียญ [4]) เปรียบเทียบ (3, 1, 0); ถ้า (เหรียญ [0]+เหรียญ [3] <เหรียญ [1]+เหรียญ [4]) เปรียบเทียบ (4, 0, 1); }} void ที่ได้รับการป้องกันเปรียบเทียบ (int i, int J, int k) {ถ้า (เหรียญ [i]> เหรียญ [k]) system.out.print ("/nfake coins" + (i + 1) + "หนักกว่า"); อื่น System.out.print ("/n สกุลเงินปลอม" + (j + 1) + "เบา"); } โมฆะคงที่สาธารณะหลัก (สตริง [] args) {ถ้า (args.length == 0) {system.out.println ("อินพุตน้ำหนักสกุลเงินปลอม (ใหญ่กว่าหรือเล็กกว่า 10)"); System.out.println ("Ex. Java Coins 5"); กลับ; } เหรียญ Eightcoins = เหรียญใหม่ (); Eightcoins.setFake (Integer.parseint (args [0])); Eightcoins.fake (); -ผลลัพธ์:
ป้อนน้ำหนักสกุลเงินปลอม (ใหญ่กว่าหรือเล็กกว่า 10)
อดีต. Java Coins 5
นี่คือวิธีการแก้ปัญหาทั่วไป คุณสามารถพิจารณารหัสอย่างรอบคอบ สำหรับรหัสนี้การวิเคราะห์ข้างต้นนั้นเพียงพอแล้ว ทุกคนต้องคิดเกี่ยวกับมันและเรียนรู้ส่วนที่เหลือด้วยตัวเองเพื่อให้พวกเขาสามารถเข้าใจได้อย่างลึกซึ้ง
สรุป
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้เกี่ยวกับการแก้ไขรหัสเหรียญเงินแปดรหัสสำหรับการใช้งานการเขียนโปรแกรม Java ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึงหัวข้ออื่น ๆ ที่เกี่ยวข้องในเว็บไซต์นี้ต่อไป หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!