一个逻辑题(某地有两个奇怪的村庄,张庄的人在星期一、三、五说谎,李村的人在星期二、四、六说谎。在其他日子他们说实话。)引发的思考

题目如下,代码如下,希望各路大神不吝赐教。

  某地有两个奇怪的村庄,张庄的人在星期一、三、五说谎,李村的人在星期二、四、六说谎。在其他日子他们说实话。

一天,外地的王从明来到这里,见到两个人,分别向他们提出关于日期的题。两个人都说:”前天是我说谎的日子。” 

如果被问的两个人分别来自张庄和李村,那么这一天是星期几? 

   下面是有遍历的方式,自我感觉不是很好,不知道能不能从逻辑推导的方式获取最后的结果。

 1 package jiang.test;
 2 /**
 3  * 某地有两个奇怪的村庄,张庄的人在星期一、三、五说谎,李村的人在星期二、四、六说谎。在其他日子他们说实话。
 4  * 一天,外地的王从明来到这里,见到两个人,分别向他们提出关于日期的题。两个人都说:”前天是我说谎的日子。” 
 5  * 如果被问的两个人分别来自张庄和李村,那么这一天是星期几? 
 6  * @author Administrator
 7  *
 8  */
 9 public class WhatDay {
10 
11     public static void main(String[] args) {
12         boolean isLay = true;
13         for(int beYes = 1;beYes <= 7;beYes++){
14             int today = (beYes+2)%7;
15             String ZhangZhang = "zhang";
16             String LiCun =  "li";
17             if(isRight(ZhangZhang,beYes,isLay)&&isRight(LiCun,beYes,isLay)){
18                 System.err.println("这一天是星期"+today);
19             }
20         }
21     }
22     /**
23      * 逻辑是否正确,正确就返回true
24      * @param user
25      * @param beYes
26      * @param isLay
27      * @return
28      */
29     public static boolean isRight(String user,int beYes,boolean isLay){
30         int today = (beYes+2)%7;
31         boolean belay = isLying(user,beYes);
32         boolean lay = isLying(user,today);
33         if(lay&&!belay==isLay){
34             return true;
35         }else if(!lay&&belay==isLay){
36             return true;
37         }else 
38             return false;
39     }
40     /**
41      * 是否说谎
42      * @param user
43      * @param day
44      * @return
45      */
46     public static boolean isLying(String user,int day){
47         if(user.equals("zhang")){
48             if(day==1||day==3||day==5)
49                 return true;
50         }else if(user.equals("li")){
51             if(day==2||day==4||day==6)
52                 return true;
53         }
54         return false;
55     }
56 }

 

posted @ 2016-11-02 19:11  见仙于毫末  Views(4500)  Comments(3Edit  收藏  举报
TOP