代码
import random, math
from typing import Dict, Union, List
def split_number(target: int, split_count: int = 1, min_value: int = 1, max_value: int = math.inf) -> Dict[str, Union[str, bool, List[int]]]:
"""将整数分割成多个整数"""
if not min_value <= target // split_count <= max_value:
return {
"success": False,
"error": "不满足min_value<=target//split_count<=max_value"
}
remainder = target # 待分割值
parts = [] # 存放分割结果
for i in range(split_count - 1, 0, -1):
current_max = min(remainder - i * min_value, max_value) # remainder - i * min_value 计算最大可分割量
current_min = max(remainder - i * max_value, min_value) # remainder - i * max_value 计算最小可分割量
left_len = remainder // (i + 1) - current_min
right_len = current_max - remainder // (i + 1)
# 分割点左右两侧长度相等
if left_len < right_len:
section = (current_min, remainder // (i + 1) + left_len)
elif left_len > right_len:
section = (remainder // (i + 1) - right_len, current_max)
else:
section = (current_min, current_max)
val = random.randint(*section)
parts.append(val)
remainder -= val # 分割
return {
"success": True,
"data": parts + [remainder]
}
运行结果
![在这里插入图片描述](i-blog.csdnimg.cn/direct/c1b5…