美文网首页程序员
指定数组个数, 总和以及最小值, 获取一组随机数.

指定数组个数, 总和以及最小值, 获取一组随机数.

作者: 肚腩照明月 | 来源:发表于2018-03-19 11:36 被阅读0次

指定数组个数, 总和以及最小值, 获取一组随机数.

  • 原始需求如下:
给定总和SUM(A), 给定最小数字M ,给定数列的长度S, 和数列中每个数字的精度P , 
 要求数列中每个数字都必须满足 A >=M, 精度满足P,且均匀递增的长度为S 的数列。
 返回此数列.
 
 比如 总和 SUM(A)=39,最小数字是M1,数列长度S 是6,精度P是1,下面是一个可能的解。
 
 1.0,3.2,5.1,7.3,9.8,12.6。
  • Java_random_numbers.java
    这个代码是实现指定数组个数, 总和以及最小值, 获取一组随机数
/*package whatever //do not write package name here */

import java.io.*;
import java.util.Arrays;
class GFG {
    public static double[] getRandDistArray(int n, double m, double min)
{
    double randArray[] = new double[n];
    double sum = 0;

    // Generate n random numbers
    for (int i = 0; i < randArray.length; i++)
    {
        randArray[i] = Math.random();
        sum += randArray[i];
    }

    // check number value
    int cnt = 0;
    while (true)
    {
        if ((randArray[cnt] / sum * m) < min)
        {
            sum -= randArray[cnt];    
            randArray[cnt] = Math.random();
            sum += randArray[cnt];
            cnt = -1;
        }
    
        cnt++;
        if (cnt >= randArray.length)
        {
            break;
        }
        
    }
    // Normalize sum to m
    for (int i = 0; i < randArray.length; i++)
    {
        randArray[i] /= sum;
        randArray[i] *= m;
    }
    return randArray;
}
    
    public static void main (String[] args) {
        double sum[] = getRandDistArray(50, 1, 0.0001);
        Arrays.sort(sum);
        System.out.println(Arrays.toString(sum));
    }
}

将代码放到下面这个网址上测试下 :

https://ide.geeksforgeeks.org/index.php

01.png
  • Java_random_numbers_with_precision.java
    这个代码是: 指定数组个数, 总和以及最小值, 并且按一定区间和精度 生成一组随机数.

源码在: https://github.com/toniz/Java_random_numbers

相关文章

网友评论

    本文标题:指定数组个数, 总和以及最小值, 获取一组随机数.

    本文链接:https://www.haomeiwen.com/subject/oiiuqftx.html