日期:2014-05-20  浏览次数:20747 次

张老师的生日问题 求java code
大家都知道张老师生日问题 这道面试题吧? 我再发一下

小明和小强都是张老师的学生,张老师的生日是M月N日,2人都知道张老师的生日是下列10组中的一天,张老师把M值告诉了小明,把N值告诉了小强,张老师问他们知道他的生日是那一天吗? 
    3月4日 3月5日 3月8日 
    6月4日 6月7日 
    9月1日 9月5日 
    12月1日 12月2日 12月8日 
    小明说:如果我不知道的话,小强肯定也不知道 
    小强说:本来我也不知道,但是现在我知道了 
    小明说:哦,那我也知道了 
    请根据以上对话推断出张老师的生日是哪一天

我想求这个题的java code!

有人知道该怎么写吗???

------解决方案--------------------
Java code


public class Test{
    
    public static void main(String[] args) {
        System.out.println(getDate());
    }
    
    static String getDate(){
        String[] dates = new String[]{"3-4","3-5","3-8","6-4","6-7","9-1","9-5","12-1","12-2","12-8"};
        //排除从日期可以确定月份的生日
        String[] datesTemp = dates.clone();
        int count = 0;
        for(int i = 0;i < datesTemp.length;i++){
            count = 0;
            String day = datesTemp[i].split("-")[1];
            for(int j = 0;j < dates.length;j++){
                if(datesTemp[j].split("-")[1].equals(day)){
                    count++;
                }
            }
            if(count == 1){
                String mouth = datesTemp[i].split("-")[0];
                for(int j = 0;j < dates.length;j++){
                    if(datesTemp[j].split("-")[0].equals(mouth)){
                        dates[j] = "";
                    }
                }
            }            
        }
        //获取重复的日子
        String day = "";
        for(int i = 0;i < dates.length;i++){
            count = 0;
            for(int j = i + 1;j < dates.length;j++){
                if(!dates[j].equals("") && dates[i].split("-")[1].equals(dates[j].split("-")[1])){
                    count++;
                }
            }
            if(count != 0){
                day = dates[i].split("-")[1];
                break;
            }
        }
        //确定只有2个生日的月份
        String mouth = "";
        for(int i = 0;i < dates.length;i++){
            count = 0;
            for(int j = 0;j < dates.length;j++){
                mouth =  dates[i].split("-")[0];
                if(!dates[j].equals("") && mouth.equals(dates[j].split("-")[0])){
                    count++;
                }
            }
            if(count != 2){
                for(int j = 0;j < dates.length;j++){
                    if(mouth.equals(dates[j].split("-")[0])){
                        dates[j] = "";
                    }
                }
            }
        }
        
        //由于小强知道了,那么就不是重复的日子
        for(int i = 0;i < dates.length;i++){
            if(!dates[i].equals("") && day.equals(dates[i].split("-")[1])){
                dates[i] = "";
            }
        }

        for(int i = 0;i < dates.length;i++){
            if(!dates[i].equals(""))
                return dates[i];
        }
        return null;
    }
}