PHP实现MissingDigit函数 查找数学表达式中缺失的数字x
PHP实现MissingDigit函数
函数规则
- 入参
$str为字符串类型,内容是包含3个整数、单个运算符(支持+、-、*、/四种)、1个等号的简单数学等式 - 等式三个整数中,某一位数字会被字符
x替换,需计算能让等式成立的x对应的0-9数字并返回 - 示例:输入
$str为"3x + 12 = 46"时,正确输出为4 - 约束:
x可出现在三个整数的任意位置,所有整数取值范围为0 ≤ 数值 ≤ 1000000
实现代码
function MissingDigit($str) { // 按空格拆分字符串,提取操作数和运算符 $parts = explode(' ', $str); $num1Str = $parts[0]; $op = $parts[1]; $num2Str = $parts[2]; $resultStr = $parts[4]; // 遍历0-9所有可能的数字替换x for ($i = 0; $i <= 9; $i++) { // 替换x为当前数字,转成整数 $n1 = (int)str_replace('x', (string)$i, $num1Str); $n2 = (int)str_replace('x', (string)$i, $num2Str); $res = (int)str_replace('x', (string)$i, $resultStr); // 按运算符校验等式是否成立 $isMatch = false; switch ($op) { case '+': $isMatch = ($n1 + $n2) == $res; break; case '-': $isMatch = ($n1 - $n2) == $res; break; case '*': $isMatch = ($n1 * $n2) == $res; break; case '/': // 除法用乘法校验,避免浮点精度问题,同时排除除零错误 $isMatch = $n2 != 0 && $n1 == $res * $n2; break; } if ($isMatch) { return $i; } } // 题目保证输入合法,正常不会走到这里 return -1; } // 测试调用 echo MissingDigit("3x + 12 = 46"); // 输出4 ?>
逻辑说明
- 先按输入串的固定空格格式拆分,拿到两个左侧操作数字符串、运算符、右侧结果字符串
- 遍历0到9所有可能的数字,将三个字符串里的
x替换为当前数字后转成整数 - 按照对应运算符做等式校验,除法场景用乘法逆运算判断,规避浮点误差和除零问题
- 匹配到成立的等式时直接返回当前替换的数字即可
内容的提问来源于stack exchange,提问作者Vaibhav Garsondiya
相关产品推荐
相关产品推荐

