import itertools
# 配置参数
TARGET_VALUE = 28098 # 目标值
BASE_COEFFICIENTS = [38.5, 44, 61, 70.5, 75.5, 93] # 基础系数列表
MAX_PRODUCT = 129000 # 单个系数乘积的严格上限
VARIABLE_RATIO_TOLERANCE = 0.4 # 变量间比例容忍度
COEFFICIENT_GROUPS = [
(70.5, 75.5, 93), # 优先搜索的系数组合(按从小到大排序对应a,b,c)
(61, 70.5, 93),
(61, 75.5, 93),
(61, 70.5, 75.5)
]
def find_similar_solutions():
"""寻找与示例解模式相似的解"""
# 搜索优先系数组合(已按从小到大排序)
for coeffs in COEFFICIENT_GROUPS:
solutions = find_three_variable_solutions(coeffs)
if solutions:
print_solutions_group(coeffs, solutions)
return
# 扩大搜索范围,所有组合按从小到大排序
for combo in itertools.combinations(BASE_COEFFICIENTS, 3):
coeffs = sorted(combo) # 确保系数按从小到大排序
if coeffs in COEFFICIENT_GROUPS:
continue
solutions = find_three_variable_solutions(coeffs)
if solutions:
print_solutions_group(coeffs, solutions)
return
print("未找到符合条件的解")
def are_variables_balanced(vars):
"""判断变量是否均衡分布"""
if len(vars) != 3:
return False
a, b, c = sorted(vars)
ratio1 = a / c
ratio2 = b / c
in_range = all(500 <= v <= 2000 for v in vars)
return ratio1 > (1 - VARIABLE_RATIO_TOLERANCE) and \
ratio2 > (1 - VARIABLE_RATIO_TOLERANCE / 2) and \
in_range
def find_three_variable_solutions(coeffs):
"""寻找三变量解,系数按从小到大排序(a,b,c)"""
a, b, c = coeffs # a:最小系数, b:中间系数, c:最大系数
solutions = []
# 计算变量可能的范围
max_x = min(int(MAX_PRODUCT / a), 2000)
max_y = min(int(MAX_PRODUCT / b), 2000)
min_x = max(500, int((TARGET_VALUE * 0.2) / a))
min_y = max(500, int((TARGET_VALUE * 0.2) / b))
# 减小步长以找到更多解
step = max(1, (max_x - min_x) // 300)
for x in range(min_x, max_x + 1, step):
ax = a * x
if ax > MAX_PRODUCT:
continue
remaining_after_ax = TARGET_VALUE - ax
if remaining_after_ax <= 0:
continue
for y in range(min_y, max_y + 1, step):
by = b * y
if by > MAX_PRODUCT:
continue
remaining_after_by = remaining_after_ax - by
if remaining_after_by <= 0:
continue
# 计算z的值(对应最大系数c)
z = remaining_after_by / c
if not z.is_integer() or not (500 <= z <= 2000):
continue
z = int(z)
cz = c * z
if cz > MAX_PRODUCT:
continue
# 检查总和
total = ax + by + cz
if abs(total
- TARGET_VALUE
) > 1: continue
# 检查是否为平衡解
is_balanced = are_variables_balanced([x, y, z])
solutions.append((x, y, z, ax, by, cz, total, is_balanced))
# 找到4个解后停止
if len(solutions) >= 4:
return solutions
return solutions
def print_solutions_group(coeffs, solutions):
"""按照指定格式打印找到的解组"""
a, b, c = coeffs # a:最小系数, b:中间系数, c:最大系数
print(f"组合: a={a}, b={b}, c={c} ({len(solutions)} 个有效解)")
for i, (x, y, z, ax, by, cz, total, is_balanced) in enumerate(solutions, 1):
balance_label = " [平衡解]" if is_balanced else ""
# 按照要求的格式分行显示
print(f" {i}. x={x}, y={y}, z={z},")
print(f" a*x={ax}, b*y={by}, c*z={cz}, 总和={total}{balance_label}")
if __name__ == "__main__":
find_similar_solutions()
aW1wb3J0IGl0ZXJ0b29scwoKIyDphY3nva7lj4LmlbAKVEFSR0VUX1ZBTFVFID0gMjgwOTggICMg55uu5qCH5YC8CkJBU0VfQ09FRkZJQ0lFTlRTID0gWzM4LjUsIDQ0LCA2MSwgNzAuNSwgNzUuNSwgOTNdICAjIOWfuuehgOezu+aVsOWIl+ihqApNQVhfUFJPRFVDVCA9IDEyOTAwMCAgIyDljZXkuKrns7vmlbDkuZjnp6/nmoTkuKXmoLzkuIrpmZAKVkFSSUFCTEVfUkFUSU9fVE9MRVJBTkNFID0gMC40ICAjIOWPmOmHj+mXtOavlOS+i+WuueW/jeW6pgpDT0VGRklDSUVOVF9HUk9VUFMgPSBbCiAgICAoNzAuNSwgNzUuNSwgOTMpLCAgIyDkvJjlhYjmkJzntKLnmoTns7vmlbDnu4TlkIjvvIjmjInku47lsI/liLDlpKfmjpLluo/lr7nlupRhLGIsY++8iQogICAgKDYxLCA3MC41LCA5MyksCiAgICAoNjEsIDc1LjUsIDkzKSwKICAgICg2MSwgNzAuNSwgNzUuNSkKXQoKZGVmIGZpbmRfc2ltaWxhcl9zb2x1dGlvbnMoKToKICAgICIiIuWvu+aJvuS4juekuuS+i+ino+aooeW8j+ebuOS8vOeahOinoyIiIgogICAgIyDmkJzntKLkvJjlhYjns7vmlbDnu4TlkIjvvIjlt7LmjInku47lsI/liLDlpKfmjpLluo/vvIkKICAgIGZvciBjb2VmZnMgaW4gQ09FRkZJQ0lFTlRfR1JPVVBTOgogICAgICAgIHNvbHV0aW9ucyA9IGZpbmRfdGhyZWVfdmFyaWFibGVfc29sdXRpb25zKGNvZWZmcykKICAgICAgICBpZiBzb2x1dGlvbnM6CiAgICAgICAgICAgIHByaW50X3NvbHV0aW9uc19ncm91cChjb2VmZnMsIHNvbHV0aW9ucykKICAgICAgICAgICAgcmV0dXJuCiAgICAKICAgICMg5omp5aSn5pCc57Si6IyD5Zu077yM5omA5pyJ57uE5ZCI5oyJ5LuO5bCP5Yiw5aSn5o6S5bqPCiAgICBmb3IgY29tYm8gaW4gaXRlcnRvb2xzLmNvbWJpbmF0aW9ucyhCQVNFX0NPRUZGSUNJRU5UUywgMyk6CiAgICAgICAgY29lZmZzID0gc29ydGVkKGNvbWJvKSAgIyDnoa7kv53ns7vmlbDmjInku47lsI/liLDlpKfmjpLluo8KICAgICAgICBpZiBjb2VmZnMgaW4gQ09FRkZJQ0lFTlRfR1JPVVBTOgogICAgICAgICAgICBjb250aW51ZQogICAgICAgIHNvbHV0aW9ucyA9IGZpbmRfdGhyZWVfdmFyaWFibGVfc29sdXRpb25zKGNvZWZmcykKICAgICAgICBpZiBzb2x1dGlvbnM6CiAgICAgICAgICAgIHByaW50X3NvbHV0aW9uc19ncm91cChjb2VmZnMsIHNvbHV0aW9ucykKICAgICAgICAgICAgcmV0dXJuCiAgICAKICAgIHByaW50KCLmnKrmib7liLDnrKblkIjmnaHku7bnmoTop6MiKQoKZGVmIGFyZV92YXJpYWJsZXNfYmFsYW5jZWQodmFycyk6CiAgICAiIiLliKTmlq3lj5jph4/mmK/lkKblnYfooaHliIbluIMiIiIKICAgIGlmIGxlbih2YXJzKSAhPSAzOgogICAgICAgIHJldHVybiBGYWxzZQogICAgCiAgICBhLCBiLCBjID0gc29ydGVkKHZhcnMpCiAgICByYXRpbzEgPSBhIC8gYwogICAgcmF0aW8yID0gYiAvIGMKICAgIGluX3JhbmdlID0gYWxsKDUwMCA8PSB2IDw9IDIwMDAgZm9yIHYgaW4gdmFycykKICAgIAogICAgcmV0dXJuIHJhdGlvMSA+ICgxIC0gVkFSSUFCTEVfUkFUSU9fVE9MRVJBTkNFKSBhbmQgXAogICAgICAgICAgIHJhdGlvMiA+ICgxIC0gVkFSSUFCTEVfUkFUSU9fVE9MRVJBTkNFIC8gMikgYW5kIFwKICAgICAgICAgICBpbl9yYW5nZQoKZGVmIGZpbmRfdGhyZWVfdmFyaWFibGVfc29sdXRpb25zKGNvZWZmcyk6CiAgICAiIiLlr7vmib7kuInlj5jph4/op6PvvIzns7vmlbDmjInku47lsI/liLDlpKfmjpLluo/vvIhhLGIsY++8iSIiIgogICAgYSwgYiwgYyA9IGNvZWZmcyAgIyBhOuacgOWwj+ezu+aVsCwgYjrkuK3pl7Tns7vmlbAsIGM65pyA5aSn57O75pWwCiAgICBzb2x1dGlvbnMgPSBbXQogICAgCiAgICAjIOiuoeeul+WPmOmHj+WPr+iDveeahOiMg+WbtAogICAgbWF4X3ggPSBtaW4oaW50KE1BWF9QUk9EVUNUIC8gYSksIDIwMDApCiAgICBtYXhfeSA9IG1pbihpbnQoTUFYX1BST0RVQ1QgLyBiKSwgMjAwMCkKICAgIG1pbl94ID0gbWF4KDUwMCwgaW50KChUQVJHRVRfVkFMVUUgKiAwLjIpIC8gYSkpCiAgICBtaW5feSA9IG1heCg1MDAsIGludCgoVEFSR0VUX1ZBTFVFICogMC4yKSAvIGIpKQogICAgCiAgICAjIOWHj+Wwj+atpemVv+S7peaJvuWIsOabtOWkmuinowogICAgc3RlcCA9IG1heCgxLCAobWF4X3ggLSBtaW5feCkgLy8gMzAwKQogICAgZm9yIHggaW4gcmFuZ2UobWluX3gsIG1heF94ICsgMSwgc3RlcCk6CiAgICAgICAgYXggPSBhICogeAogICAgICAgIGlmIGF4ID4gTUFYX1BST0RVQ1Q6CiAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgIAogICAgICAgIHJlbWFpbmluZ19hZnRlcl9heCA9IFRBUkdFVF9WQUxVRSAtIGF4CiAgICAgICAgaWYgcmVtYWluaW5nX2FmdGVyX2F4IDw9IDA6CiAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgIAogICAgICAgIGZvciB5IGluIHJhbmdlKG1pbl95LCBtYXhfeSArIDEsIHN0ZXApOgogICAgICAgICAgICBieSA9IGIgKiB5CiAgICAgICAgICAgIGlmIGJ5ID4gTUFYX1BST0RVQ1Q6CiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIHJlbWFpbmluZ19hZnRlcl9ieSA9IHJlbWFpbmluZ19hZnRlcl9heCAtIGJ5CiAgICAgICAgICAgIGlmIHJlbWFpbmluZ19hZnRlcl9ieSA8PSAwOgogICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAjIOiuoeeul3rnmoTlgLzvvIjlr7nlupTmnIDlpKfns7vmlbBj77yJCiAgICAgICAgICAgIHogPSByZW1haW5pbmdfYWZ0ZXJfYnkgLyBjCiAgICAgICAgICAgIGlmIG5vdCB6LmlzX2ludGVnZXIoKSBvciBub3QgKDUwMCA8PSB6IDw9IDIwMDApOgogICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgIAogICAgICAgICAgICB6ID0gaW50KHopCiAgICAgICAgICAgIGN6ID0gYyAqIHoKICAgICAgICAgICAgaWYgY3ogPiBNQVhfUFJPRFVDVDoKICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIyDmo4Dmn6XmgLvlkowKICAgICAgICAgICAgdG90YWwgPSBheCArIGJ5ICsgY3oKICAgICAgICAgICAgaWYgYWJzKHRvdGFsIC0gVEFSR0VUX1ZBTFVFKSA+IDE6CiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICMg5qOA5p+l5piv5ZCm5Li65bmz6KGh6KejCiAgICAgICAgICAgIGlzX2JhbGFuY2VkID0gYXJlX3ZhcmlhYmxlc19iYWxhbmNlZChbeCwgeSwgel0pCiAgICAgICAgICAgIAogICAgICAgICAgICBzb2x1dGlvbnMuYXBwZW5kKCh4LCB5LCB6LCBheCwgYnksIGN6LCB0b3RhbCwgaXNfYmFsYW5jZWQpKQogICAgICAgICAgICAKICAgICAgICAgICAgIyDmib7liLA05Liq6Kej5ZCO5YGc5q2iCiAgICAgICAgICAgIGlmIGxlbihzb2x1dGlvbnMpID49IDQ6CiAgICAgICAgICAgICAgICByZXR1cm4gc29sdXRpb25zCiAgICAKICAgIHJldHVybiBzb2x1dGlvbnMKCmRlZiBwcmludF9zb2x1dGlvbnNfZ3JvdXAoY29lZmZzLCBzb2x1dGlvbnMpOgogICAgIiIi5oyJ54Wn5oyH5a6a5qC85byP5omT5Y2w5om+5Yiw55qE6Kej57uEIiIiCiAgICBhLCBiLCBjID0gY29lZmZzICAjIGE65pyA5bCP57O75pWwLCBiOuS4remXtOezu+aVsCwgYzrmnIDlpKfns7vmlbAKICAgIHByaW50KGYi57uE5ZCIOiBhPXthfSwgYj17Yn0sIGM9e2N9ICh7bGVuKHNvbHV0aW9ucyl9IOS4quacieaViOinoykiKQogICAgCiAgICBmb3IgaSwgKHgsIHksIHosIGF4LCBieSwgY3osIHRvdGFsLCBpc19iYWxhbmNlZCkgaW4gZW51bWVyYXRlKHNvbHV0aW9ucywgMSk6CiAgICAgICAgYmFsYW5jZV9sYWJlbCA9ICIgW+W5s+ihoeino10iIGlmIGlzX2JhbGFuY2VkIGVsc2UgIiIKICAgICAgICAKICAgICAgICAjIOaMieeFp+imgeaxgueahOagvOW8j+WIhuihjOaYvuekugogICAgICAgIHByaW50KGYiICB7aX0uIHg9e3h9LCB5PXt5fSwgej17en0sIikKICAgICAgICBwcmludChmIiAgYSp4PXtheH0sIGIqeT17Ynl9LCBjKno9e2N6fSwg5oC75ZKMPXt0b3RhbH17YmFsYW5jZV9sYWJlbH0iKQoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIGZpbmRfc2ltaWxhcl9zb2x1dGlvbnMoKQogICAg