You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Python实现1-9数字含2加2减运算符的目标数组合求解脚本需求

问题分析与实现思路

先明确核心约束:数字1-9必须按顺序排列,8个数字间隙里必须插入2个+、2个-,剩下的间隙不插符号(数字直接拼接),最终要找出所有运算结果等于目标数的表达式。

实现分四步走:

  • 生成合法符号位置组合:从8个间隙里选2个放+,再从剩下的6个里选2个放——用itertools.combinations能高效生成所有不重复的位置组合,避免手动枚举的冗余。
  • 拼接表达式字符串:按数字顺序遍历,遇到标记了符号的间隙就插入对应符号,没标记的就继续拼接数字,最终得到完整的算术表达式。
  • 计算表达式结果:直接用eval计算表达式值(这里都是自己生成的合法表达式,不存在安全问题)。
  • 筛选匹配目标的表达式:把计算结果等于目标数的表达式收集起来,就是最终结果。
Python 实现脚本
import itertools

def find_target_expressions(target):
    digits = list('123456789')
    gaps = list(range(8))  # 数字间的8个间隙,索引0对应1和2之间,以此类推
    valid_exprs = []
    
    # 生成所有合法的符号位置组合:先选2个间隙放+,再从剩余间隙选2个放-
    for plus_pos in itertools.combinations(gaps, 2):
        remaining_gaps = [g for g in gaps if g not in plus_pos]
        for minus_pos in itertools.combinations(remaining_gaps, 2):
            # 构建间隙到符号的映射
            symbol_map = {}
            for p in plus_pos:
                symbol_map[p] = '+'
            for m in minus_pos:
                symbol_map[m] = '-'
            
            # 拼接表达式
            expr = []
            for idx in range(9):
                expr.append(digits[idx])
                # 处理当前数字后的间隙(如果不是最后一个数字)
                if idx < 8:
                    if idx in symbol_map:
                        expr.append(symbol_map[idx])
            expr_str = ''.join(expr)
            
            # 计算结果并匹配目标
            try:
                if eval(expr_str) == target:
                    valid_exprs.append(expr_str)
            except:
                # 理论上不会触发,因为表达式都是合法的
                pass
    
    return valid_exprs

# 示例:查找结果为50的表达式
if __name__ == '__main__':
    target_num = 50
    results = find_target_expressions(target_num)
    if results:
        print(f"找到以下等于{target_num}的表达式:")
        for expr in results:
            print(expr)
    else:
        print(f"未找到等于{target_num}的表达式")

内容的提问来源于stack exchange,提问作者Cameron Ashton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 11:25:18