Split a random value into four that sum up to it

后端 未结 6 872
被撕碎了的回忆
被撕碎了的回忆 2020-12-20 05:50

I have one value like 24, and I have four textboxes. How can I dynamically generate four values that add up to 24?

All the values must be integers and can\'t be nega

6条回答
  •  [愿得一人]
    2020-12-20 06:34

    func getRandomValues(amountOfValues:Int, totalAmount:Int) -> [Int]?{
        if amountOfValues < 1{
            return nil
        }
    
        if totalAmount < 1{
            return nil
        }
    
        if totalAmount < amountOfValues{
            return nil
        }
    
        var values:[Int] = []
        var valueLeft = totalAmount
    
        for i in 0..

    This is not a final answer, but it should be a (good) starting point.

    How it works: It takes 2 parameters. The amount of random values (4 in your case) and the total amount (24 in your case).

    It takes a random value between the total Amount and 0, stores this in an array and it subtracts this from a variable which stores the amount that is left and stores the new value.

    Than it takes a new random value between the amount that is left and 0, stores this in an array and it again subtracts this from the amount that is left and stores the new value.

    When it is the last number needed, it sees what amount is left and adds that to the array

    EDIT:

    Adding a +1 to the random value removes the problem of having 0 in your array.

    EDIT 2:

    Shuffling the array does remove the increased chance of having a high value as the first value.

提交回复
热议问题