一路面试题引发的思考
一道面试题引发的思考
背景是一道面试题
有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
写出计算第五个人多大的,过程(java)
如果这个题目给一个小学生,他也能很快做出来。大学生就不用说了,总结一下规律,比如一个等差数列几行代码就能解决问题。但要是你实现后面试则说其中一个说他说错了,是大3岁,而打破这种规则,你又如何处理呢。
这里就不对上诉做法进行任何说明。仅针对该类问题做一些分析。看下面关系
5-->4-->3-->2-->1
是不是一个链表关系,这里我想到了用责任链实现,对于上诉问题变化也能完美扩展,或许这才是面试者的本意。
第二题,可用责任链:
输出结果:
you guess...
you guess...
you guess...
you guess...
ok,I tell you!
2011-08-05 10:10:27 INFO Person[getAge]:21 - com.shuidexiongdi.chain.age.PersonFirstmy age is:10
2011-08-05 10:10:27 INFO Person[getAge]:21 - com.shuidexiongdi.chain.age.PersonSecondmy age is:12
2011-08-05 10:10:27 INFO Person[getAge]:21 - com.shuidexiongdi.chain.age.PersonThirdmy age is:14
2011-08-05 10:10:27 INFO Person[getAge]:21 - com.shuidexiongdi.chain.age.PersonFourthmy age is:16
2011-08-05 10:10:27 INFO Person[getAge]:21 - com.shuidexiongdi.chain.age.PersonFifthmy age is:18
背景是一道面试题
有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
写出计算第五个人多大的,过程(java)
如果这个题目给一个小学生,他也能很快做出来。大学生就不用说了,总结一下规律,比如一个等差数列几行代码就能解决问题。但要是你实现后面试则说其中一个说他说错了,是大3岁,而打破这种规则,你又如何处理呢。
这里就不对上诉做法进行任何说明。仅针对该类问题做一些分析。看下面关系
5-->4-->3-->2-->1
是不是一个链表关系,这里我想到了用责任链实现,对于上诉问题变化也能完美扩展,或许这才是面试者的本意。
第二题,可用责任链:
package com.shuidexiongdi.chain.age; public interface IPerson { int getAge(); void setNextPerson(IPerson nextPerson); void setBiggerThanNextPersonAge(int biggerThanNextPersonAge); }
package com.shuidexiongdi.chain.age; import org.apache.log4j.Logger; public abstract class Person implements IPerson { private Logger logger = Logger.getLogger(Person.class); private int biggerThanNextPersonAge; private IPerson nextPerson; private int myAge; public final int getAge() { initMyAge(); if(this.nextPerson != null) { this.myAge = this.nextPerson.getAge() + this.biggerThanNextPersonAge; } logger.info(this.getClass().getName() + " my age is:" + this.myAge); return this.myAge; } public void setNextPerson(IPerson nextPerson) { this.nextPerson = nextPerson; } void initMyAge() { this.myAge = telYouMyAge(); } abstract int telYouMyAge(); public void setBiggerThanNextPersonAge(int biggerThanNextPersonAge) { this.biggerThanNextPersonAge = biggerThanNextPersonAge; } }
package com.shuidexiongdi.chain.age; public class PersonFifth extends Person { @Override int telYouMyAge() { System.out.println("you guess..."); return 0; } }
package com.shuidexiongdi.chain.age; public class PersonFourth extends Person { @Override int telYouMyAge() { System.out.println("you guess..."); return 0; } }
package com.shuidexiongdi.chain.age; public class PersonThird extends Person { @Override int telYouMyAge() { System.out.println("you guess..."); return 0; } }
package com.shuidexiongdi.chain.age; public class PersonSecond extends Person { @Override int telYouMyAge() { System.out.println("you guess..."); return 0; } }
package com.shuidexiongdi.chain.age; public class PersonFirst extends Person { @Override int telYouMyAge() { System.out.println("ok,I tell you! "); return 10; } }
package com.shuidexiongdi.chain.age; public class Client { public static void main(String[] args) { IPerson person5 = new PersonFifth(); IPerson person4 = new PersonFourth(); IPerson person3 = new PersonThird(); IPerson person2 = new PersonSecond(); IPerson person1 = new PersonFirst(); person5.setNextPerson(person4); person5.setBiggerThanNextPersonAge(2); person4.setNextPerson(person3); person4.setBiggerThanNextPersonAge(2); person3.setNextPerson(person2); person3.setBiggerThanNextPersonAge(2); person2.setNextPerson(person1); person2.setBiggerThanNextPersonAge(2); person1.setNextPerson(null); person5.getAge(); } }
输出结果:
you guess...
you guess...
you guess...
you guess...
ok,I tell you!
2011-08-05 10:10:27 INFO Person[getAge]:21 - com.shuidexiongdi.chain.age.PersonFirstmy age is:10
2011-08-05 10:10:27 INFO Person[getAge]:21 - com.shuidexiongdi.chain.age.PersonSecondmy age is:12
2011-08-05 10:10:27 INFO Person[getAge]:21 - com.shuidexiongdi.chain.age.PersonThirdmy age is:14
2011-08-05 10:10:27 INFO Person[getAge]:21 - com.shuidexiongdi.chain.age.PersonFourthmy age is:16
2011-08-05 10:10:27 INFO Person[getAge]:21 - com.shuidexiongdi.chain.age.PersonFifthmy age is:18
1 楼
envy2002
2012-02-03
设 年龄分别为a,b,c,d,e
列出方程:a=b+2;
b=c+2;
.....
用矩阵的方式解, 也可以啊。
列出方程:a=b+2;
b=c+2;
.....
用矩阵的方式解, 也可以啊。