題目如下,代碼如下,希望各路大神不吝賜教。
某地有兩個奇怪的村庄,張庄的人在星期一、三、五說謊,李村的人在星期二、四、六說謊。在其他日子他們說實話。
一天,外地的王從明來到這里,見到兩個人,分別向他們提出關於日期的題。兩個人都說:”前天是我說謊的日子。”
如果被問的兩個人分別來自張庄和李村,那么這一天是星期幾?
下面是有遍歷的方式,自我感覺不是很好,不知道能不能從邏輯推導的方式獲取最后的結果。
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 }