请写出一个函数,计算出如下几个字母代表的数字:
AB-CD=EF
EF+GH=PPP
使用推断法算推论出的正确答案是 8-6-5-4-3-2-7-9-1,但如何使用程序来计算这个正确答案?
推论过程,首先推论出 P=1,在根据P=1推论出 F H只能是 [5,6] [4,7] [8,3]再依次推论。另外一个推论是 A C E G P 中没有一个会是0.
写的PHP函数,不过运行不出来,卡死:
for ($a = 0; $a < 10; $a++) {
for ($b = 0; $b < 10; $b++) {
for ($c = 0; $c < 10; $c++) {
for ($d = 0; $d < 10; $d++) {
for ($e = 0; $e < 10; $e++) {
for ($f = 0; $f < 10; $f++) {
for ($g = 0; $g < 10; $g++) {
for ($h = 0; $h < 10; $h++) {
for ($p = 0; $p < 10; $p++) {
$arr = [$a, $b, $c, $d, $e, $f, $g, $h];
if (count(array_unique($arr)) == count($arr) && $a > 0 && $c > 0 && $e > 0 && $g > 0 && $p > 0 && ($a . $b) - ($c . $d) + ($e . $h) == ($p . $p . $p)) {
print_r($arr);
}
}
}
}
}
}
}
}
}
}
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
答案貌似不唯一,下面是我计算出来的结果
Python写的代码,PHP估计稍微费事点,我这边全部跑完花了快7秒。
输出:
简化你的写法,
5秒钟以内可以出结果
修改答案
时间0.553s,还是基于你的思想,只判断条件,未做任何推理
不要这么暴力枚举,尝试做一些剪枝。
我的想法:
1.首先枚举E, F, G, H,检查运算的结果是不是一个满足PPP形式的三位数,需要枚举的情况数是
10^4. 假设通过检查的组合数是N。2.对于第一步每一个通过检查的组合,枚举A, B, C, D的值,判断能否满足第一个等式的约束,每次需要枚举的情况数也是
10^4.这样总的运算次数是
10^4 + N * 10^4,N应该是一个很小的数,很快就可以出结果。小亮的答案是挺快的。。。
php算的
其实这道题 可以直接出ppp=111 因为就算CD=0 AB+GH不可能大于200
这样可以少一些循环
你们的答案都好快...不过貌似没有一个符合要求的,要递归算法啊,递归会有堆栈操作,肯定慢很多。我这个的测试结果是13秒。
@RobinTang 结果和你的是一致的。
无聊之下又跑了一次带0的结果,花费31秒。运行的源码如下
3, 4, 0, 9, 2, 5, 8, 6, 1
3, 6, 0, 9, 2, 7, 8, 4, 1
4, 5, 0, 6, 3, 9, 7, 2, 1
5, 2, 0, 9, 4, 3, 6, 8, 1
5, 7, 0, 8, 4, 9, 6, 2, 1
5, 7, 0, 9, 4, 8, 6, 3, 1
7, 2, 0, 9, 6, 3, 4, 8, 1
8, 4, 0, 5, 7, 9, 3, 2, 1
8, 4, 0, 9, 7, 5, 3, 6, 1
8, 5, 0, 6, 7, 9, 3, 2, 1
8, 5, 4, 6, 3, 9, 7, 2, 1
8, 6, 5, 4, 3, 2, 7, 9, 1
9, 0, 2, 7, 6, 3, 4, 8, 1
9, 0, 6, 3, 2, 7, 8, 4, 1
9, 3, 0, 6, 8, 7, 2, 4, 1
9, 3, 0, 7, 8, 6, 2, 5, 1
9, 5, 2, 7, 6, 8, 4, 3, 1
Time:31
面试考这个你们考官你也真是强大,这东西花了我40分钟的时间。
从数学角度说,P只能是1,所以这个代码还有优化的空间。
递归生成字母与数字映射的关联数组,然后取出判断是否满足等式.
结果:
85 - 46 = 39 + 72 = 111
95 - 27 = 68 + 43 = 111
90 - 63 = 27 + 84 = 111
90 - 27 = 63 + 48 = 111
86 - 54 = 32 + 79 = 111
大概几十毫秒出结果吧
难道还有什么条件没看出来,结果还是不唯一!!
因为前面好像有答案了所以就想写个快速点的,写的比较久OTZ(一上午...doge脸
可能是公司服务器跑的比较快惹?
结果:
time:0.0034201145172119
90-63=27
27+84=111
86-54=32
32+79=111
85-46=39
39+72=111
90-27=63
63+48=111
95-27=68
68+43=111
不过感觉递归用的不伦不类_(:з」∠)_