Split number into sum components

后端 未结 9 2386
-上瘾入骨i
-上瘾入骨i 2021-02-12 18:07

Is there an efficient algorithm to split up a number into N subsections so that the sum of the numbers adds up to the original, with a base minimum? For example, if

9条回答
  •  情书的邮戳
    2021-02-12 18:32

    import random
    
    def split_given_number_into_n_random_numbers(number, number_of_subsections, min_random_number_desired = 0):
        cumulative_sum_of_random_numbers = 0
        current_subsection = 1
        max_random_number = int(number/number_of_subsections)
        if min_random_number_desired > max_random_number:
            print("ERROR: Cannot have min number as {} and split {} in {} subsections".format(min_random_number_desired,
                                                                                              number, number_of_subsections))
            return False
    
        while (True):
            random_number = random.randint(min_random_number_desired, max_random_number)
            print("Random number {} = {}".format(current_subsection, random_number))
            cumulative_sum_of_random_numbers += random_number
            # print("Cumulative sum {}".format(sum_of_num))
            number -= random_number
            current_subsection += 1
            if current_subsection == number_of_subsections:
                random_number = number
                print("Random number {} = {}".format(current_subsection, random_number))
                cumulative_sum_of_random_numbers += random_number
                break
    
        print("Final cumulative sum of random numbers = {}".format(cumulative_sum_of_random_numbers))
        return True
    
    if __name__ == '__main__':
        split_given_number_into_n_random_numbers(50, 7, 2)
    

    Now if you want minimum number to be something else besides 2, change it to any value provided number_of_subsections * min_random_number_desired <= number.

提交回复
热议问题