大家都知道张老师生日问题 这道面试题吧? 我再发一下小明和小强都是张老师的学生,张老师的生日是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!有人知道该怎么写吗???
3月4日 3月5日 3月8日
6月4日 6月7日
9月1日 9月5日
12月1日 12月2日 12月8日
小明说:如果我不知道的话,小强肯定也不知道
小强说:本来我也不知道,但是现在我知道了
小明说:哦,那我也知道了
请根据以上对话推断出张老师的生日是哪一天我想求这个题的java code!有人知道该怎么写吗???
解决方案 »
- List<User> userList = new ArrayList<User>();
- 菜鸟问题:就是想问下如果我要在一个类中调用另一个类中的tf.getText()中的内容,该怎么弄呢?
- JTabbedPane的问题
- Component和JComponent有什么关系?
- 请问做JAVA一般都用什么数据库?全是ORACLE吗?
- 请推荐几本Java好书
- 我怎么不能发帖子?
- Jbuilder问题,解决后就给分,在线等待。。。。。。。
- What is ApacheJServ ,how use it?
- 怎么获取指定时间内的前后5分钟
- JFileChooser如何添加多个文件类型过滤?
- 请问一个ant脚本的问题
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;
}
}
说明小明知道的月数,里面的日数是有重复的,所以排除6月和12月,因为7日和2日是没重复的,如果是6月或12月不能肯定是小强不知道 小强说:本来我也不知道,但是现在我知道了
说明小强知道的日数在剩下的月数里是唯一的,剩下的月数是3月和9月,日数唯一的有3月4日,3月8日和9月1日,所以日数是4,8,1的某一个小明说:哦,那我也知道了
说明小明知道的月数里,该月中日数唯一的不能多于2个,否则小明没法判断,所以只有9月1日了代码例子
String[] date = {
"3月4日", "3月5日", "3月8日",
"6月4日", "6月7日",
"9月1日", "9月5日",
"12月1日","12月2日","12月8日"
};
List<String[]> list = new LinkedList<String[]>();
for (String s : date) {
list.add(s.split("\\D+")); //把月日分割出来保存到数组
}
Set<String> del = new HashSet<String>();for (int i=0; i<list.size(); i++) { //第一句话
boolean exist = false;
for (int j=0; j<list.size(); j++) {
if (i!=j && list.get(j)[1].equals(list.get(i)[1])) { //查找唯一的日数
exist = true;
break;
}
}
if (! exist) {//如果是唯一的日数
del.add(list.get(i)[0]); //则该月要删除
}
}
for (String s : del) {
for (int i=list.size()-1; i>=0; i--) {
if (list.get(i)[0].equals(s)) list.remove(i);
}
}del.clear();
for (int i=0; i<list.size(); i++) { //第二句话
boolean exist = false;
for (int j=0; j<list.size(); j++) {
if (i!=j && list.get(j)[1].equals(list.get(i)[1])) { //查找唯一的日数
exist = true;
break;
}
}
if (exist) { //如果日数不是唯一的
del.add(list.get(i)[1]); //则该日要删除
}
}
for (String s : del) {
for (int i=list.size()-1; i>=0; i--) {
if (list.get(i)[1].equals(s)) list.remove(i);
}
}del.clear();
for (int i=0; i<list.size(); i++) { //第三句话
boolean exist = false;
for (int j=0; j<list.size(); j++) {
if (i!=j && list.get(j)[0].equals(list.get(i)[0])) { //查找唯一月数
exist = true;
break;
}
}
if (exist) { //如果不是唯一月
del.add(list.get(i)[0]); //则该月要删除
}
}
for (String s : del) {
for (int i=list.size()-1; i>=0; i--) {
if (list.get(i)[0].equals(s)) list.remove(i);
}
}if (list.size() > 0) {
for (String[] s : list) System.out.printf("%s月%s日\n", s[0], s[1]);
}