Как сгенерировать случайное число, которое делится поровну на другое случайно сгенерированное число - PullRequest
0 голосов
/ 30 декабря 2018

Я работаю над простым приложением математических карточек, используя JavaScript и jQuery.Доступны следующие операции: сложение, вычитание, умножение и деление, каждая из которых имеет функции, которые используют generateTop() и generateBottom() для присвоения значений элементам HTML.

У меня проблемы с выяснением того, как использовать мою функцию задачи деления для генерации случайных чисел, чтобы topNumber делилось равномерно на bottomNumber.Я использую следующий код для генерации случайных чисел для каждой задачи:

let topNumber = 0;
let bottomNumber = 0;

function generateTop(max, min){
  topNumber = Math.floor(Math.random() * (max - min) + min);
  return topNumber;
};

function generateBottom(max, min){
  bottomNumber = Math.floor(Math.random() * (max - min) + min);
  return bottomNumber;
};

Вот мой текущий генератор проблем деления:

function division(){
  problemTop.html(generateTop(1, 144));
  problemBottom.html(generateBottom(1, topNumber));
  opSym.html("÷");
}

Я могу настроить максимальное и минимальное значения, чтобы получитьположительное целое число для задач сложения, вычитания и умножения, но я застрял на том, как получить положительное целое число для задач деления.Я пытался возиться с некоторыми другими идеями петли, но не получил ничего, чтобы работать.Я хочу сохранить min на 1 и max на 144.

Я проверил SO на наличие решений, но могу найти только то, как генерировать случайные числа, делимые на одно другое явное, жестко закодированное число.Как настроить функцию деления так, чтобы topNumber можно было равномерно разделить на bottomNumber?

Ответы [ 3 ]

0 голосов
/ 30 декабря 2018

Добавьте параметр denomenator к вашей функции generateTop и передайте случайно сгенерированный "нижний" (знаменатель) номер, возвращаемый из generateBottom.Умножьте новое случайное число, созданное в generateTop знаменателем, и верните его.

0 голосов
/ 30 декабря 2018

Просто добавьте один оператор if, чтобы сделать вашу функцию рекурсивной:

function generateBottom(max, min) {
    bottomNumber = Math.floor(Math.random() * (max - min) + min);
    if (topNumber % bottomNumber) {
        generateBottom(max, min);
    }
    return bottomNumber;
}

Что он делает, это делит topNumber и проверяет, существует ли остаток.Если есть остаток, это означает, что два не делят, поэтому он пересчитывается.В противном случае он возвращает bottomNumber как обычно.

0 голосов
/ 30 декабря 2018

Вы можете сделать так:

var a = Math.floor(Math.random() * 10) 
var b = a * Math.floor(Math.random() * 10) 
var c = b/a;

document.write(b + " is divisible by " + a + " ( *" + c + ")" )

В a * b b всегда делится на a.

let topNumber = 0;
let bottomNumber = 0;

function generateTop(max, min, a){
  
  topNumber = a * Math.floor(Math.random() * (max - min) + min);
  return topNumber + " is divisible by " + a + " ( *" + topNumber/a + ")";
  
};

function generateBottom(max, min){
  
  bottomNumber = Math.floor(Math.random() * (max - min) + min);
  return bottomNumber;
  
};

document.write(generateTop(10, 1, generateBottom(10, 1)))
...