- 论坛徽章:
- 0
|
网上说有多种结果,可是我就算出来2中,剩下的大家在考虑吧,贴我的代码供大家参考。
我这个方法不能算是纯程序计算,很多逻辑上的东西在程序里没有想出方法来判断,表示。
- #!/bin/bash
- :<<'EOF'
- # 说一下我的思路,大家参考
- # 假设 三个人和数分别是 A(a) B(b) C(c) 大写字母代表人,小写字母代表数字。
- #
- # 1、根据题意 得出 a!=b a!=c b!=c
- # 因为 a=b or a=c or b=c 任一为真的时候,在前三次就可以得到结果,不符合题意。
- # 2、根据题意 得出 a!=2b a!=2c b!=2a b!=2c c!=2a c!=2b
- # 因为 上述条件任一为真的时候 在第五次之前就可以得到结果,不符合题意。
- # 3、第六次能得到答案是因为某一个条件不能满足上面的条件之一。
- #
- # A 用户可能结果 ((b+c) b c) (Abs(b-c) b c)
- #
- # B 用户可能结果 (a (a+c) c) (a Abs(a-c) c)
- #
- # C 用户可能结果 (a b (a+b)) (a b Abs(a-b))
- #
- # 因第六次出了结果,所以 (a+b) or Abs(a-b) 必然有一个且只有一个不符合条件二,故在第六次可以判断,否则在第六次无法判断结果
- # 而且凡是有数字 c 的加减法 均必须满足条件 1 2
- #
- # 假设 (a b Abs(a-b)) 满足条件 那么 (a+b) 必然不满足条件 ,因此 a b 必须满足条件 1 2 而 a+b 必须不满足条件 2
- #
- # 前提 a b 必须满足条件 1 2
- # a!=b a!=2b b!=2a c=(a+b)
- # 根据上面的条件可以得到
- # c=(a+b) --> a!=c b!=c a!=2c b!=2c
- # a!=b --> c!=2a c!=2b
- #
- # 因为假设中 (a+b) 完全符合条件 1 2 故假设不成立。
- # 因此我们得到 a+b=144
- EOF
- function Abs(){
- (( $[$@] > 0 )) && { echo $@;return; }
- echo $[0-($@)]
- }
- for i in {1..143};do
- a=$i;b=$[144-$i];c=$(Abs a-b)
- if (( $a != $b )) && (( $[2*$a] != b )) && (( $[2*$b] != $a ));then
- if (( $a != $c )) && (( $b != $c ));then
- if (( $a == $[2*$c] ));then
- echo "A=$a B=$b C=144"
- continue 1;
- elif (( $b == $[2*$c] ));then
- echo "A=$a B=$b C=144"
- continue 1;
- elif (( $c == $[2*$a] ));then
- echo "A=$a B=$b C=144"
- continue 1;
- elif (( $c == $[2*$b] ));then
- echo "A=$a B=$b C=144"
- continue 1;
- fi
- fi
- fi
- done
复制代码
A=36 B=108 C=144
A=108 B=36 C=144
且 A B 的关系为 (A:B ==1:3) A=3X B=X X为任意正整数。
A 和 B 的顺序可以互换 |
|