Generate n random numbers whose sum is m and all numbers should be greater than zero

后端 未结 8 866
忘掉有多难
忘掉有多难 2020-12-18 04:04

I want to generate 9 non zero random numbers whose sum is 250. I have tried following code it gives me 9 random numbers but some numbers are zero.

 public vo         


        
8条回答
  •  青春惊慌失措
    2020-12-18 04:50

    //Perl code translated to Java
    //Its working and no 0's !!!!
    
    import java.util.*;
    import java.util.stream.*;enter code here
    
    public class MyClass {
        public static void main(String args[]) {
         int numberOfDraws = 17;
         int targetSum = 40;
         
    
    
    Random r = new Random();
    
    
    List load = new ArrayList<>();
    
    
    
    int sum = 0;
    for (int i = 0; i < numberOfDraws; i++) {
            int next = r.nextInt(targetSum) + 1;
            load.add(next);
            sum += next;
            System.out.println("Arraylist first loop " + load.get(i));
        }
        
        
    double factor = (((double)targetSum)-((double)numberOfDraws)) / ((double)sum);
    System.out.println("Factor value: " + factor);
    
    int newSum =0;
    for (int i = 0; i < numberOfDraws; i++) {
        load.set(i, (int) ((load.get(i) * factor)) + 1);
        newSum += load.get(i);
        
        System.out.println("Arraylist second loop " + load.get(i));
    }
    
    
    
    int fudge = targetSum - newSum;
    for (int i = 0; i < fudge; i++) {
    
       
       int y = r.nextInt(numberOfDraws);
            load.set(i, load.get(i) + 1);
       
    }
    
    System.out.println("Random arraylist " + load);
    
        }
        }
    

提交回复
热议问题