حل لغز رياضي بشكل برمجي بـ لغة جافا – كود
حل لغز رياضي بشكل برمجي بـ لغة جافا – كود
وصلني على الواتزاب لغز رياضي كما ترون في الصورة المرفقة, حقيقتاً ما تعبت نفسي في محاولة الحل بطريقة التجربة لحل اللغز, وصادف وصول اللغز موعد رحلتي لمسقط راسي (أبها) كنت على وشك السفر فقررت كتابة طريقة حل اللغز بكود بسيط يجرب كل الاحتمالات ويعطيني الناتج في حالة وجودة.
طريقة تحليلي للسؤال:
لدينا مجموعة من الارقام الفردية من 1 الى 15 والمطلوب ان اجمع 5 ارقام من المجموعة بحيث يكون الناتج 30 ويمكن ان يتكرر العدد من المجموعة ( اي لا يشترط ان تكون الخمسة ارقام مختلفة عن بعض)
يفترض لحل السؤال ان اجرب كل الاحتمالات, ابتداءً من (1,1,1,1,1) الى ان اصل الى (15,15,15,15,15)
يفترض ان تكون عدد الاحتمالات 32678 حسب القاعدة عدد عناصر المجموعة (8) اس عدد المنازل في كل احتمال (5) لحساب عدد الاحتمالات.
طريقة الحل
انشأت مصفوفة Array فيها الارقام الفردية من 1 الى 15
انشأت خمسة متغيرات لتمثل اماكن الخمسة ارقام في الحل (p1,p2,p3,p4,p5)
اعطيت الخمسة متغيرات قيم اولية تساوي 0 يعني اول ما يشتغل البرنامج يكون اول احتمال (1,1,1,1,1) بما ان القيمة 1 هي اول قيمة في المصفوفة (يعني يكون index = 0)
سويت while loop يعمل الى ان تصل قيمة المتغيرات (p1,p2,p3,p4,p5) الى 7 وهو اخر عنصر في المصفوفة وهو الرقم 15
داخل الـ while loop نحتاج ان نحدد طريقة زيادة المتغيرات (p1,p2,p3,p4,p5) لتمثل كل الاحتمالات الممكنة, فاستخدمت If statement لتقوم بزيادة المتغير p5 اولا الى ان يصل الى اخر عنصر في المصفوفة (index 7) ثم يصفّر المتغير p5 ويزيد واحد في p4 ويعود لـ p5 ليزيدة الى ان يصل الى اخر عنصر (index 7) ثم يعود لـ p4 ويزيدة واحد ويصفر p5 وهكذا
public static void main(String... args) { int[] num = {1, 3, 5, 7, 9, 11, 13,15}; int p1 = 0; int p2 = 0; int p3 = 0; int p4 = 0; int p5 = 0; while (p1 < num.length - 1 || p5 < num.length - 1 || p2 < num.length - 1 || p3 < num.length - 1 || p4 < num.length - 1) { if (p5 < num.length - 1) { p5++; } else if (p4 < num.length - 1) { p4++; p5 = 0; } else if (p3 < num.length - 1) { p3++; p4 = 0;p5 = 0; } else if (p2 < num.length - 1) { p2++; p3 = 0;p4 = 0;p5 = 0; } else if (p1 < num.length - 1) { p1++; p2 = 0;p3 = 0;p4 = 0;p5 = 0; } // if (num[p1]+ num[p2]+ num[p3]+ num[p4]+ num[p5] == 30) System.out.printf("%d - %d - %d - %d - %d = 30 \n", num[p1], num[p2], num[p3], num[p4], num[p5]); } }
الكود جداً سهل وواضح في فكرتة, واجزم انها ليست الطريقة الوحيدة للحل وليست افضل الطرق. لكن هذه اول فكرة خطرت في بالي لحل هذا اللغز وحبيت مشاركتها
الموضوع مفتوح للنقاش وتطوير الحل لغرض التعلم ومشاركة المعرفة.
[notice]لا يوجد حل للغزل في الرياضيات, لكن يوجد حل لاهل الوتزاب وهو: 15 يوم + 13 يوم + 1يوم + 13 ساعة + 11 ساعة = 30 يوم 🙁 [/notice]
[important]معلومة: ان حاصل جمع الأعداد الفردية يكون زوجي اذا كان (عدد الأرقام الفردية المجموعة) عدد زوجي
ويكون فردي اذا كان (عدد الأرقام الفردية المجموعة) عدد فردي[/important]
حل لغز رياضي بشكل برمجي بـ لغة جافا – كود
طريقتي في حل اللغز برمجيًا:
https://twitter.com/i3ahad/status/499419971345080322
شكرًا ()