◎筱米加步枪◎.Blog

Happy coding

一道英文数学题

昨天下午,接到蒜头发的一道题目,结果下午都没在工作,一直在算这道题目,本人对数学感兴趣,没算出来总觉得怪怪的。

题目如下:

    C L O V E R
+  C R O C U S
-----------------------
    V  I  O L E T
这道英语算式译成中文就是“三叶草+番红花=紫罗兰”。如果算式是正确的,那么每个字母应该各代表什么数字?注意:相同的字母表示同一数字,不同字母表示不同数字。 

本来想用程序实现下,结果发现按照穷举法要执行 1010 次,于是就想根据一些条件排除一些数字,来减少执行次数,但是排着排着,手动就解出来了。

用的是排除法,假设10个字母都有10种可能(0-9),解题过程(排除过程如下)

//1.C.V!=0
//2.C<5
//3.R.S.T!=0
//4.O+O=O || O+O+1=O || O+O=10+O || O+O+1=10+O -->O=0,9
//5.E+U=E || E+U+1=E || E+U=10+E || E+U+1=10+E -->U=0,9
//6.除O,U外,其他数字不能为0,9
//7.V不可能是1
//8.if(O=9) ->V+C=10+L  C=1.2.3.4
//             if(C=1) V>=9 (排除) if(C=2) V>=8(排除)
//             if(C=3) V=8,L=1     if(C=4) V=7,8 ,L=1,2
//             if(L=1) -> L+R=I<10 ->C+C=V ->2C=V 与(C=3,V=8)(C=4,V=7)矛盾
//             so:L=2,C=4,V=8,U=0,那么可得:L+R+1=I<10 ->R+3=I<10
//             R={1,3,5,6,7} R=1,5,6,7时,I=4,5,9,10(不满足,排除) ->R=3,I=6
//             -> R+S=T<10 ->3+S=T<10 (S,T可选值:{1,5,7})无满足条件,因此O=9假设失败
//   得结论:O=0,U=9
//9.由8可得,R+S=T>10,因此R.S!=1,2  T!=7,8
//10.因为U=9,O=0 ->V+C+1=L<10 ->V!=7,8 ->C!=4(2C=V|2C+1=V) L!=1,2,3
//11.假设L+R=I<10 ->V=2C -> L={4,5} R={3,4} I={7,8} ->L=4,R=3 || L=5,R=3  ->L={4,5},R=3,I={7,8}
//   V+C+1=L ->V+C=3,4 因:V=2C -> 3C=3,4 -> C=1,L-1=3 -> L=4 ->I=7
//   由此得:C=1,V=2,L=4,I=7,R=3,O=0,U=9  E.S.T={5,6,8} ->R+S=10+T = S-T =7 无满足条件,所以L+R=I<10不成立
//   所以得:L+R=10+I 且 V=2C+1 ,V={3,5} 排除2,4,6,C排除3 I排除7,8
//12.V+C+1 = L -> 2C+1+C+1=L -> 3C+2=L 因:C={1,2} ->L={5,8} 排除4,6,7
//13.假设:C=1 -> V=3,L=5 ->L+R=10+I,因为R={3,4,5,6,7,8}->R=7,其他数不满足 -> I=2
//   已知参数:C=1,V=3,L=5,R=7,I=2,O=0,U=9  由R+S=10+T 得S-T=3 S.T={4,6,8} 无满足条件,所以假  设C=1失败
//14.由上面得知C=2,V=5,L=8 ,排除E.R.S.I.T中的2,5,8
//15.L+R=10+I ->8+R=10+I,R={3,4,6,7}其中R=4,7时,I=5,8不满足,排除 所以R={3,6}
//16.R+S=10+T ->{3,6}+S=10+T ->S排除3,4,6 ->S=7 ->R=6 ->T=3 ->I=4 ->E=1

最终得出结果:

C={2};
L={8};
O={0};
V={5};
E={1};
R={6};
S={7};
U={9};
I={4};
T={3};

结果验证:

    280516
 + 260297
---------------
    540813

正确。