اذهب إلى المحتوى

السؤال

نشر (معدل)

إستبدل علامة الإستفهام بواحد من ال Arithmetic Operators لتخرج بالنتيجة المطلوبة

غير مسموح التعديل على الأرقام و النتيجة المطلوبة هي صفر

console.log(10 ? 20 ? 15 ? 3 ? 190 ? 10 ? 400); // 0

 

تم التعديل في بواسطة Wael Aljamal
توضيح السؤال

Recommended Posts

  • 0
نشر
بتاريخ 10 دقائق مضت قال Sam Ahw:

Arithmetic Operators أو العمليات الحسابية في الجافاسكريبت هي: + , - , * , / , %

هل قمت بمحاولة حل السؤال؟ أرجو أن تنشر الطرق التي جربتها والناتج الذي ظهر معك

نعم اخي لقد حاولت استخراج النتيجة عبر استخدام العمليات الحسابية لكن دائما ما يكون الناتج اما اكبر من الصفر او اصغر من الصفر صراحة لقد حيرني هادا التمرين واود بشدة معرفة كيفية حله.

شكرا لك

  • 0
نشر

لحل السؤال علينا فهم الخوارزميات العودية حيث يقوم التابع function باستدعاء نفسه ولكن للمرحلة التالية من حل المشكلة، ولكل استدعاء حالة مميزة عن باقي الحالات، في مسألتنا يجب تجريب وضع جميع المعاملات الرياضية مكان كل اشارة استفهام ثم الانتقال للإشارة الاستفهام التالية و تجريب جميع المعاملات..

لذلك سيكون لدينا دالة تقبل مصفوفة فيها الرموز ورقم الخطوة وفيها حلقة تجرب استبدال ؟ بقيمة جميع المعاملات ثم تستدعي الخطوة التالية (إشارة الاستفهام التالية)..

عندما نقوم بتبديل جميع الإشارات يبقى مهمة عمل تقييم للتعبير الرياضي، والتأكد هل القيمة هنا تساوي 0 حسب شرط المسألة؟ هنا استخدمت مكتبة math والدالة evaluate للتحقق.

  • يوجد 180 حل مختلف للمسألة
const math = require("./math.js");                   // مكتبة خارجية
const operands = ["+", "-", "*", "/", "%"];          // مصفوفة المعاملات
let sequence = "10 ? 20 ? 15 ? 3 ? 190 ? 10 ? 400";  // السلسة التي تعبر عن المعادلة
let maxStep = sequence.split("?").length - 1;        // عدد إشارات الاستفهام
let numberOfSolutions = 0;                           // عدد الحلول
sequence = sequence.split(" ");                      // تحويل السلسة لمصفوفة لنتمكن من تعديل القيم

// لايمكن تعديل قيم String 
// لأنها نمط immutable

//console.log(maxStep);

function solve(seq, step) {      // دالة الحل تقبل مصفوفة القيم و الرموز و الوسيط الثاني هو رقم إشارة الاستفهام
  //console.log(step);
  if (step === maxStep) {        // بعد الوصول لآخر خطوة نحسب التعبير
    let fin = seq.join("");      // دمج المصفوفة
    //console.log(fin);
    if (math.evaluate(fin) === 0) { // نمرر السلسسة للتقييم وفي حال وجود حل
      numberOfSolutions++;
      console.log("solution ", numberOfSolutions, ": ", fin);  // نطبع الحل
    }
    return;
  }
  let index = step * 2 + 1;  // حساب دليل العنصر الحالي الذي نريد تبديله
  let nextStep = step + 1;   // رقم الخطوة التالية
  for (let op = 0; op < operands.length; op++) {      // تجريب المعاملات
    seq[index] = operands[op];     // استبدال المعامل مكان إشارة استفهام هذه الخطوة
    solve(seq, nextStep);          // استدعاء الدالة للخطوة التالية
  }
}

solve(sequence, 0);      // استدعاء أساسي

console.log("numberOfSolutions: ", numberOfSolutions);     // طباعة عدد الحلول

الملفات:

math js.rar

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...