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

如何仅用加减法构造等式?未知等号右侧数值的方程求解

解决方案:找到输入向量的唯一加减法组合等式

问题明确

给定数值向量,其中存在唯一一种组合方式:用向量中除某一元素外的所有元素,通过加法和减法运算得到该元素。需要找出对应的等式。

修正输入格式

你的示例输入写法有误,R中创建向量需用c():

inputs <- c(12.8, 30, 10, 10.3, 3.1)

实现函数

以下是满足需求的R函数,通过遍历目标值、生成所有符号组合并验证的方式找到唯一解:

find_equation <- function(vec) {
  # 逐个尝试向量中的每个元素作为等式右侧的目标值
  for (target_idx in seq_along(vec)) {
    target <- vec[target_idx]
    candidates <- vec[-target_idx]
    candidate_count <- length(candidates)
    
    # 生成所有可能的加减符号组合(每个候选数对应+1或-1)
    sign_combinations <- expand.grid(rep(list(c(1, -1)), candidate_count))
    
    # 计算每种符号组合下的候选数运算结果
    calculation_results <- apply(sign_combinations, 1, function(signs) sum(candidates * signs))
    
    # 匹配结果与目标值(处理浮点数精度误差)
    match_pos <- which(abs(calculation_results - target) < 1e-6)
    if (length(match_pos) > 0) {
      selected_signs <- sign_combinations[match_pos, ]
      
      # 拼接等式字符串
      equation_parts <- character(candidate_count)
      for (i in seq_along(candidates)) {
        if (selected_signs[i] == 1) {
          equation_parts[i] <- ifelse(i == 1, as.character(candidates[i]), paste0("+ ", candidates[i]))
        } else {
          equation_parts[i] <- paste0("- ", abs(candidates[i]))
        }
      }
      return(paste(c(paste(equation_parts, collapse = " "), "=", target), collapse = " "))
    }
  }
  return("未找到符合条件的等式")
}

测试函数

运行函数即可得到目标等式:

find_equation(inputs)
# 输出结果:"12.8 + 10 + 10.3 - 3.1 = 30"

逻辑说明

  1. 遍历向量中的每个元素,将其作为等式右侧的目标值,剩余元素作为运算数
  2. 生成运算数所有可能的加减符号组合(每个运算数前可以是+或-)
  3. 计算每种组合的运算结果,与目标值匹配(用精度阈值避免浮点数比较误差)
  4. 找到唯一匹配的组合后,拼接成直观的等式字符串返回

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 10:00:03