js实现产生n个随机数,并且随机数之和是固定值
时间: 2023-07-18 17:51:16 浏览: 54
可以通过以下代码实现:
```javascript
function generateRandomNumbers(n, sum) {
// 生成 n - 1 个随机数
let nums = [];
let currentSum = 0;
for (let i = 0; i < n - 1; i++) {
let num = Math.floor(Math.random() * (sum - currentSum - (n - i - 1)) + 1);
nums.push(num);
currentSum += num;
}
// 计算最后一个随机数
nums.push(sum - currentSum);
// 随机打乱数组
for (let i = n - 1; i > 0; i--) {
let j = Math.floor(Math.random() * (i + 1));
[nums[i], nums[j]] = [nums[j], nums[i]];
}
return nums;
}
```
这个函数接受两个参数:n 表示要生成的随机数个数,sum 表示这些随机数的和。函数首先生成 n - 1 个随机数,确保它们的和小于 sum,然后计算最后一个随机数。最后,函数随机打乱数组并返回它。这样生成的随机数之和就是固定值 sum 了。
相关问题
js实现产生n个不为负数的随机数,并且随机数之和是固定值
可以使用以下代码实现:
```javascript
function generateRandomNumbers(n, sum) {
let arr = [];
let total = 0;
for (let i = 0; i < n; i++) {
let random = Math.floor(Math.random() * (sum - total + 1));
arr.push(random);
total += random;
}
if (total < sum) {
let diff = sum - total;
arr[n-1] += diff;
}
return arr;
}
```
这个函数使用了一个循环,每次生成一个随机数并将其添加到数组中。同时,每次生成的随机数都会被累加到一个总数中,以便于后续检查随机数之和是否等于指定的固定值。如果最后随机数之和小于指定的固定值,则将差值加到最后一个随机数上,确保随机数之和等于指定的固定值。
js实现产生n个不为负数的随机数 ,且随机数不大于平均值,并且随机数之和是固定值
可以使用以下方法实现:
1. 首先计算平均值,即固定值除以随机数的个数。
2. 初始化一个数组,用来存放随机数。
3. 使用一个循环,循环n次,每次生成一个随机数。
4. 生成随机数的方法是:先生成一个0到平均值之间的随机数,然后判断该随机数是否大于平均值减去已有随机数之和,如果大于则将该随机数设为平均值减去已有随机数之和,否则保留该随机数。
5. 最后将随机数数组返回即可。
以下是代码实现:
```javascript
function generateRandomNumbers(n, total) {
const average = total / n;
const numbers = [];
let sum = 0;
for (let i = 0; i < n; i++) {
let randomNumber = Math.random() * average;
if (randomNumber > average - sum) {
randomNumber = average - sum;
}
sum += randomNumber;
numbers.push(randomNumber);
}
return numbers;
}
```
调用方法:
```javascript
const numbers = generateRandomNumbers(5, 20);
console.log(numbers); // [3.393714516236299, 2.67638505252966, 4.969718026029407, 2.852224747407859, 6.107957657796775]
console.log(numbers.reduce((acc, cur) => acc + cur, 0)); // 20
```
注意,由于随机数生成的性质,上述方法并不能保证所有随机数都不大于平均值。但是,平均值和随机数之和是固定的,因此任何一个随机数大于平均值都会导致其他随机数变小。因此,算法是近似正确的,可以满足大部分实际需求。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)