我正在制作JavaScript算法,以随机顺序生成所有可能组合的简单数学问题(问题)。
e.x。
1 + 2
3 + 5
7 + 2
3 + 1
工作组合带有加号。问题是当我尝试用减号生成数字时。该算法应生成大于第二个
的第一个数字e.x。
firstNumber(更大)-secondNumber(低级)
5-3
4-1
2-5(不可能)
无论如何,代码执行无限循环,我无法弄明白。请提供工作示例的帮助。如果您有任何问题,请在评论部分写下。感谢您的帮助:))
<html>
<p id='plus10'></p>
<p id='minus10'></p>
<p id='plus100'></p>
<p id='minus100'></p>
<script>
arr2 = [];
var lastArr2 = [];
var num1, num2;
while(lastArr2.length < 121) {
arr2.push('<br>' + Math.round(Math.random() * 10) + '+' + Math.round(Math.random() * 10) + '=');
lastArr2 = removeDuplicates(arr2);
}
document.getElementById('plus10').innerHTML = (lastArr2.join(' '));
arr1 = [];
var lastArr1 = [];
while(lastArr1.length < 121) {
arr1.push('<br>' + Math.round(Math.random() * 100) + '+' + Math.round(Math.random() * 100) + '=');
lastArr1 = removeDuplicates(arr1);
}
document.getElementById('plus100').innerHTML = (lastArr1.join(' '));
arr3 = [];
var lastArr3 = [];
while(lastArr3.length < 121) {
gen();
}
function gen() {
//minus function
num1 = Math.round(Math.random() * 10);
num2 = Math.round(Math.random() * 10);
if(num1 < num2) {
gen();
} else {
lastArr3 = removeDuplicates(arr3);
arr3.push(num1 + '-' + num2 + '=');
}
}
document.getElementById('minus10').innerHTML = (lastArr3.join(' '));
function removeDuplicates(arr) {
let unique_array = []
for(let i = 0; i < arr.length; i++) {
if(unique_array.indexOf(arr[i]) == -1) {
unique_array.push(arr[i])
}
}
return unique_array
}
</script>
</html>
答案 0 :(得分:0)
让我们来看看你的while循环,找到数字0-10的负组合。
while (lastArr3.length < 121) {
gen();
}
这里的问题是没有121种组合,所以lastArr3.length永远不会是121.使用加号组合,这是有效的,因为在0到10之间正好有121个2个数字的组合。但是,现在你已经消除了第一个数字小于第二个数字的每个组合,组合数量下降。
话虽如此,我可以建议一种更有效的方法来实现你想要做的事情吗?通过使用Math.random()生成数字,你会发现循环运行多长时间不一致。如何按顺序生成所有组合,然后将它们随机插入到数组中?
这样的事情:
var arr = []
for (var i = 0; i <= 10; ++i) {
for (var k = i; k <= 10; ++k) {
var str = '<br>' + k + '-' + i + '='
var index = Math.round(Math.random() * (arr.length - 1))
arr.splice(index, 0, str)
}
}
答案 1 :(得分:0)
不是仅在num1&gt; num2时推送值,你甚至可以在num1&lt; NUM2。
if(num1 < num2){
arr3.push(num2 + '-' + num1 + '=' );
}