# 配置参数
TARGET_SUM = 72602 # 目标总和
MULTIPLIER = 620 # 乘数
NUMBER_TO_SPLIT = 117.1 # 原始数字
SPLIT_PARTS = 8 # 拆分份数
MIN_PRODUCT = 6000 # 最小乘积
MAX_PRODUCT = 10000 # 最大乘积
def split_numbers():
# 基础验证
if not isclose(NUMBER_TO_SPLIT * MULTIPLIER, TARGET_SUM):
print("参数不匹配: 原始数字×乘数 ≠ 目标总和")
return None
min_total = SPLIT_PARTS * MIN_PRODUCT
max_total = SPLIT_PARTS * MAX_PRODUCT
if TARGET_SUM < min_total or TARGET_SUM > max_total:
print(f"无法拆分: 目标总和需在[{min_total}, {max_total}]范围内")
return None
# 生成初始乘积
step = (MAX_PRODUCT - MIN_PRODUCT) // (SPLIT_PARTS - 1) if SPLIT_PARTS > 1 else 1
products = [MIN_PRODUCT + i * step for i in range(SPLIT_PARTS)]
# 调整至目标总和
current_sum = sum(products)
diff = TARGET_SUM - current_sum
i = 0
direction = 1 if diff > 0 else -1
while diff != 0:
if MIN_PRODUCT <= products[i] + direction <= MAX_PRODUCT and (products[i] + direction) not in products:
products[i] += direction
diff -= direction
i = (i + 1) % SPLIT_PARTS
# 计算拆分值
split_values = []
for p in products:
val = p / MULTIPLIER
if val.is_integer():
split_values.append(int(val))
else:
split_values.append(round(val, 2))
# 输出结果
print("拆分结果:")
parts = []
for v in split_values:
if isinstance(v, int):
parts.append(f"{v}×{MULTIPLIER}")
else:
parts.append(f"{v}×{MULTIPLIER}")
print(" + ".join(parts) + f" = {TARGET_SUM}")
return split_values
def isclose(a, b):
return abs(a
- b
) <= 1e-9
split_numbers()
IyDphY3nva7lj4LmlbAKVEFSR0VUX1NVTSA9IDcyNjAyICAgICAgICMg55uu5qCH5oC75ZKMCk1VTFRJUExJRVIgPSA2MjAgICAgICAgICAjIOS5mOaVsApOVU1CRVJfVE9fU1BMSVQgPSAxMTcuMSAgICMg5Y6f5aeL5pWw5a2XClNQTElUX1BBUlRTID0gOCAgICAgICAgICAjIOaLhuWIhuS7veaVsApNSU5fUFJPRFVDVCA9IDYwMDAgICAgICAgIyDmnIDlsI/kuZjnp68KTUFYX1BST0RVQ1QgPSAxMDAwMCAgICAgICMg5pyA5aSn5LmY56evCgpkZWYgc3BsaXRfbnVtYmVycygpOgogICAgIyDln7rnoYDpqozor4EKICAgIGlmIG5vdCBpc2Nsb3NlKE5VTUJFUl9UT19TUExJVCAqIE1VTFRJUExJRVIsIFRBUkdFVF9TVU0pOgogICAgICAgIHByaW50KCLlj4LmlbDkuI3ljLnphY06IOWOn+Wni+aVsOWtl8OX5LmY5pWwIOKJoCDnm67moIfmgLvlkowiKQogICAgICAgIHJldHVybiBOb25lCiAgICAKICAgIG1pbl90b3RhbCA9IFNQTElUX1BBUlRTICogTUlOX1BST0RVQ1QKICAgIG1heF90b3RhbCA9IFNQTElUX1BBUlRTICogTUFYX1BST0RVQ1QKICAgIGlmIFRBUkdFVF9TVU0gPCBtaW5fdG90YWwgb3IgVEFSR0VUX1NVTSA+IG1heF90b3RhbDoKICAgICAgICBwcmludChmIuaXoOazleaLhuWIhjog55uu5qCH5oC75ZKM6ZyA5ZyoW3ttaW5fdG90YWx9LCB7bWF4X3RvdGFsfV3ojIPlm7TlhoUiKQogICAgICAgIHJldHVybiBOb25lCiAgICAKICAgICMg55Sf5oiQ5Yid5aeL5LmY56evCiAgICBzdGVwID0gKE1BWF9QUk9EVUNUIC0gTUlOX1BST0RVQ1QpIC8vIChTUExJVF9QQVJUUyAtIDEpIGlmIFNQTElUX1BBUlRTID4gMSBlbHNlIDEKICAgIHByb2R1Y3RzID0gW01JTl9QUk9EVUNUICsgaSAqIHN0ZXAgZm9yIGkgaW4gcmFuZ2UoU1BMSVRfUEFSVFMpXQogICAgCiAgICAjIOiwg+aVtOiHs+ebruagh+aAu+WSjAogICAgY3VycmVudF9zdW0gPSBzdW0ocHJvZHVjdHMpCiAgICBkaWZmID0gVEFSR0VUX1NVTSAtIGN1cnJlbnRfc3VtCiAgICBpID0gMAogICAgZGlyZWN0aW9uID0gMSBpZiBkaWZmID4gMCBlbHNlIC0xCiAgICAKICAgIHdoaWxlIGRpZmYgIT0gMDoKICAgICAgICBpZiBNSU5fUFJPRFVDVCA8PSBwcm9kdWN0c1tpXSArIGRpcmVjdGlvbiA8PSBNQVhfUFJPRFVDVCBhbmQgKHByb2R1Y3RzW2ldICsgZGlyZWN0aW9uKSBub3QgaW4gcHJvZHVjdHM6CiAgICAgICAgICAgIHByb2R1Y3RzW2ldICs9IGRpcmVjdGlvbgogICAgICAgICAgICBkaWZmIC09IGRpcmVjdGlvbgogICAgICAgIGkgPSAoaSArIDEpICUgU1BMSVRfUEFSVFMKICAgIAogICAgIyDorqHnrpfmi4bliIblgLwKICAgIHNwbGl0X3ZhbHVlcyA9IFtdCiAgICBmb3IgcCBpbiBwcm9kdWN0czoKICAgICAgICB2YWwgPSBwIC8gTVVMVElQTElFUgogICAgICAgIGlmIHZhbC5pc19pbnRlZ2VyKCk6CiAgICAgICAgICAgIHNwbGl0X3ZhbHVlcy5hcHBlbmQoaW50KHZhbCkpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc3BsaXRfdmFsdWVzLmFwcGVuZChyb3VuZCh2YWwsIDIpKQogICAgCiAgICAjIOi+k+WHuue7k+aenAogICAgcHJpbnQoIuaLhuWIhue7k+aenDoiKQogICAgcGFydHMgPSBbXQogICAgZm9yIHYgaW4gc3BsaXRfdmFsdWVzOgogICAgICAgIGlmIGlzaW5zdGFuY2UodiwgaW50KToKICAgICAgICAgICAgcGFydHMuYXBwZW5kKGYie3Z9w5d7TVVMVElQTElFUn0iKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHBhcnRzLmFwcGVuZChmInt2fcOXe01VTFRJUExJRVJ9IikKICAgIHByaW50KCIgKyAiLmpvaW4ocGFydHMpICsgZiIgPSB7VEFSR0VUX1NVTX0iKQogICAgCiAgICByZXR1cm4gc3BsaXRfdmFsdWVzCgpkZWYgaXNjbG9zZShhLCBiKToKICAgIHJldHVybiBhYnMoYSAtIGIpIDw9IDFlLTkKCnNwbGl0X251bWJlcnMoKQo=