1. مقدمة
واجه المؤلف مثل هذا السؤال في مسابقة الخوارزمية في الجامعة. الآن سأشاركها معك: هناك ثماني عملات فضية ABCDEFGH ، ومن المعروف أن إحدىها عملة مزيفة ، تختلف عن العملة الحقيقية ، لكنني لا أعرف ما إذا كانت أخف أو أثقل. كيفية استخدام الرصيد لتحديد العملة التي هي عملة مزيفة مع الحد الأدنى لعدد المقارنات ، وأنا أعلم أيضًا أن العملة المزيفة أخف وزناً من العملة الحقيقية.
2. التحليل
إذا كان هذا السؤال هو مجرد حل العملة المزيفة بسيطة للغاية ، فإن المشكلة ليست معقدة للغاية ، وتحتاج فقط إلى العودة وتتكرر للحصول على النتيجة. نحن بحاجة إلى استخدام أقل الخطوات للتعامل مع صعوبات المشكلة! ! !
بالمقارنة مع مشاكل بنية البيانات السابقة ، هناك عودة وتراجع. اليوم قد نضطر إلى الاتصال بمفهوم جديد يسمى شجرة. كما يوحي الاسم ، فإن بنية الرقم تعني أن مخطط التحليل الخاص بنا يشبه الشجرة ، مع معلومات مختلفة مثل العقد الفرعية. هيكل الأشجار هو فصل أكبر في بنية البيانات ، وليس في مناقشتنا. في هذا السؤال ، سنقدم جزيءًا صغيرًا من الشجرة ، شجرة القرار.
دعنا أولاً نبني نموذجًا رياضيًا لحل ثماني عملات فضية. موقف بسيط مثل هذا. نسمي العملات الفضية ABCDEFG ، إلخ. بدورها ، نقارن A+B+C و D+E+F. إذا كانت متساوية ، فيجب أن تكون العملة المزيفة G أو H. نقوم أولاً بمقارنة أي واحد أثقل ، G أو H. إذا كان G أثقل ، فالمقارنة مع A (A هي العملة الحقيقية). إذا كانت G مساوية لـ A ، فإن G هي العملة الحقيقية ، فإن H هي العملة المزيفة. نظرًا لأن H أخف وزناً من G و G هو العملة الحقيقية ، فإن وزن العملة المزيفة أخف من العملة الحقيقية.
ماذا لو لم يكن متساوًا؟ ما هي الحالة؟ سنقارن الفروع بدورها حتى نحصل على الإجابة النهائية!
3. عينة الرسم البياني
بناءً على التحليل أعلاه ، يمكن أن يكون لدينا مخطط شجرة قرار كامل:
4. الكود
عملات الطبقة العامة {private int [] Coins ؛ العملات العامة () {coins = new int [8] ؛ لـ (int i = 0 ؛ i <8 ؛ i ++) العملات المعدنية [i] = 10 ؛ } public void setfake (int weight) {coins [(int) (math.random () * 7)] = weight ؛ } public void fake () {if (coins [0]+coins [1]+coins [2] == coins [3]+coins [4]+coins [5]) {if (coins [6]> coins [7]) مقارنة (6 ، 7 ، 0) ؛ آخر مقارنة (7 ، 6 ، 0) ؛ } آخر إذا (Coins [0]+Coins [1]+Coins [2]> Coins [3]+Coins [4]+Coins [5]) {if (Coins [0]+Coins [3] == Coins [1]+Coins [4]) مقارنة (2 ، 5 ، 0) ؛ وإلا if (Coins [0]+Coins [3] <Coins [1]+Coins [4]) مقارنة (1 ، 3 ، 0) ؛ } آخر إذا (Coins [0]+Coins [1]+Coins [2] <Coins [3]+Coins [4]+Coins [5]) {if (Coins [0]+Coins [3] == Coins [1]+Coins [4]) مقارنة (5 ، 2 ، 0) ؛ وإلا if (Coins [0]+Coins [3] <Coins [1]+Coins [4]) مقارنة (4 ، 0 ، 1) ؛ }} void المحمية مقارنة (int i ، int j ، int k) {if (coins [i]> coins [k]) system.out.print ("/nfake coins" + (i + 1) + "Heavier") ؛ else system.out.print ("/n currency fake" + (j + 1) + "أخف وزنا") ؛ } public static void main (string [] args) {if (args.length == 0) {system.out.println ("إدخال وزن العملة المزيفة (أكبر أو أصغر من 10)") ؛ System.out.println ("ex. Java Coins 5") ؛ يعود؛ } COINS EIVECOINS = عملات معدنية جديدة () ؛ ثمانية coins.setfake (integer.parseint (args [0])) ؛ ثمانية. }}نتيجة:
أدخل وزن العملة المزيفة (أكبر أو أصغر من 10)
السابق. عملات جافا 5
هذه طريقة عامة لحل المشكلات. يمكنك النظر بعناية في الرمز. لهذا الرمز ، التحليل أعلاه يكفي. يحتاج الجميع إلى التفكير في الأمر وتعلم الباقي بأنفسهم ، حتى يتمكنوا من فهمه بعمق.
لخص
ما سبق هو كل محتوى هذه المقالة حول حل رموز العملات الفضية الثمانية لتنفيذ برمجة Java. آمل أن يكون ذلك مفيدًا للجميع. يمكن للأصدقاء المهتمين الاستمرار في الرجوع إلى الموضوعات الأخرى ذات الصلة على هذا الموقع. إذا كانت هناك أي أوجه قصور ، فيرجى ترك رسالة لإشارةها. شكرا لك يا أصدقائك لدعمكم لهذا الموقع!