张三说李四在说谎,李四说王五在说谎,王五说张三和李四都在说谎。现在问:这三人中到底谁说的是真话,谁说的是假话?

解决方案 »

  1.   

    有分析好麽?他的分析是错误的。
    逻辑我已经分析好了,代码实现遇到一些问题(要用java实现)。
      

  2.   

    分析没错吧 。
    A 张三
    B 李四
    C 王五 
    逻辑表达式 :
    A=!B
    B=!C
    C=!A&!B
    使这三个表达式都成立的ABC的值就是解。
      

  3.   

    楼上算法好~A说B说谎,B=true则A=false,B=false则A=true,所以A!=B
      

  4.   

    一个特别笨的方法,不要鄙视public class TestJavaDoc {    public static void main(String[] args) {
            //0表示false,1表示true
           for(int i=0;i<=1;i++){
               for(int j=0;j<=1;j++){
                   for(int k=0;k<=1;k++){
                       if(i==invert(j)&&j==invert(k)&&k==(invert(i)&invert(j))){
                           System.out.println(i+" "+j+" "+k);
                       }
                   }
               }
           }
        }
        public static int invert(int i){
            return i^1;
        }
    }
      

  5.   

    由于张三和李四恒为相反,即:张三 ^ 李四 ≡ TRUE,所以王五一定是在说谎话。即:王五 ≡ false;
      

  6.   

    A=!B B=!C C=!A&!B
     
    分析了一下,假设:A是对的, 即:A=1
                         A=!B 成立
                         => !B=C 成立
                         => A=C  成立 => A=!A&!B =>A=!(!B)&!B = 0 
                     (挂掉!这个组合行不通。)            假设:B是对的, B=1
                     B=!C 成立
                     => !C=!(!A&!B)
                   => B=!(!A&!B) 
                   => !B=!A&!B => !A=1 (这个解释的通。B可以是0,也可以是1)            假设:C是对的,C=1 
                       C=!A&!B 成立
                       =>!A=!(!B) 成立
                       =>C=!(!B)&!B => C=B&!B=0  (挂掉!这个组合行不通。)