一个逻辑题(某地有两个奇怪的村庄,张庄的人在星期一、三、五说谎,李村的人在星期二、四、六说谎。在其他日子他们说实话。)引发的思考
题目如下,代码如下,希望各路大神不吝赐教。
某地有两个奇怪的村庄,张庄的人在星期一、三、五说谎,李村的人在星期二、四、六说谎。在其他日子他们说实话。
一天,外地的王从明来到这里,见到两个人,分别向他们提出关于日期的题。两个人都说:”前天是我说谎的日子。”
如果被问的两个人分别来自张庄和李村,那么这一天是星期几?
下面是有遍历的方式,自我感觉不是很好,不知道能不能从逻辑推导的方式获取最后的结果。
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 }