我有一个小问题无法解决。
我想用JavaScript代码分解一个整数,例如多个大于零且彼此不同的整数的和。
目前,我已经成功创建了下面的代码。 问题是它生成大于零的整数,但它们可以彼此相等。
我怎样才能使它们彼此不同?
JavaScript 代码
const targetNumber = 40;
const numTerms = 20;
const result = BreakDownNumber(targetNumber, numTerms);
console.log("number to break down:", targetNumber);
console.log("random numbers:", result);
function BreakDownNumber(targetNumber, numTerms) {
let numbers = [];
function getRandomNumber(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
let sum = 0;
for (let i = 0; i < numTerms - 1; i++) {
let randomNumber = getRandomNumber(1, targetNumber - sum - (numTerms - i - 1));
numbers.push(randomNumber);
sum += randomNumber;
}
// Last number
numbers.push(targetNumber - sum);
return numbers;
}
我可能必须改变一切,但我不知道。 我知道这是一个微不足道的问题,但我确实是一个初学者。 ;)
我很乐意接受任何建议和帮助。
非常感谢大家。
祝编程愉快!
可以使用while循环来生成随机数,如果不符合规则则不增加i
注意:如果你有随机数,最后一个数字在数学上不能符合你的规则,这只是偶然,最后一个数字在 numTerms 上变为 1(我这样保留,以防万一是故意的)
(我更改了数字以使其运行得更快)
const targetNumber = 10;
const numTerms = 2;
const result = BreakDownNumber(targetNumber, numTerms);
console.log("number to break down:", targetNumber);
console.log("random numbers:", result);
function BreakDownNumber(targetNumber, numTerms) {
let numbers = [];
function getRandomNumber(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
let sum = 0;
let i = 0
while (i < numTerms) {
let randomNumber = getRandomNumber(1, targetNumber - sum);
if (!(numbers.includes(randomNumber))) {
numbers.push(randomNumber);
sum += randomNumber;
i++
}
}
// Last number
numbers.push(targetNumber - sum);
return numbers;
}