使用 Javascript 将整数分解为 20 个大于零的不同随机整数之和

问题描述 投票:0回答:1

我有一个小问题无法解决。

我想用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;
   }

我可能必须改变一切,但我不知道。 我知道这是一个微不足道的问题,但我确实是一个初学者。 ;)

我很乐意接受任何建议和帮助。

非常感谢大家。

祝编程愉快!

javascript arrays math random integer
1个回答
0
投票

可以使用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;
   }

© www.soinside.com 2019 - 2024. All rights reserved.