谁知道JAVA工程师面试的脑筋急转弯,越多越好,要有答案的,谢谢~~!

如题所述

  1.有一个人的了一种很严重的疾病,医生给他开了两种药片,分别称为 A 药片和 B 药片,每种分别为 4 片,每天必须吃两次,每次必须吃 A 和 B 药片各一片,出现错误就会死掉,第一天,他正常吃药,但是,第二天吃药的时候,他不小心把药片搞混了,这两种药片的外观完全一样,他也没有别的办法再获取药片,那么,他应该怎么办?

  答案
  把剩下的四片药全部分开成两半,一半放一堆,另一半放另一堆,第二天每次吃其中一堆就行了

  2.5000的阶乘末尾有几个0

  答案:
  1249个
  因为一个5的倍数产生一个零,25的倍数产生二个零
  125的倍数产生三个零,625的倍数产生四个零
  3025产生五个零,前面计算过的不说,都比前面的多产生一个零
  5,10,15,...,5000 一共1000个
  25,50,75,...,5000 共200个
  125,250,...,5000 共40个
  625,1250,...,5000 共8个
  3125 只有1个
  所以共有1249个零

  3.一头母牛在3—10岁的时候每年可以生一头小牛,生公牛和母牛的比率是50%,在牛12岁的时候就送入屠宰场买了。现在有一个农夫有1头1岁大的母牛,在母牛3岁的时候就送到附近的农场去配种,请问40年后这个农夫可能会有多少头牛,写出相关的代码或答题思路,最好用面向对象。

  答案:
  Java代码
  package com.polaris.test;

  import java.util.*;

  /**
  * 问题描述:
  *
  * 一头母牛在3—10岁的时候每年可以生一头小牛,生公牛和母牛的比率是50%,
  * 在牛12岁的时候就送入屠宰场买了。现在有一个农夫有1头1岁大的母牛,
  * 在母牛3岁的时候就送到附近的农场去配种,请问40年后这个农夫可能会有多少头牛,
  * 写出相关的代码或答题思路,最好用面向对象。
  * @author polaris http://www.beijixing001.com
  * @version 1.0
  */
  public class ComputeCattleNum {

  // 保存所有母牛
  private static List<Cattle> cows = new ArrayList<Cattle>();

  // 保存所有当前农夫拥有的牛
  private static List<Cattle> cattles = new ArrayList<Cattle>();

  public static void main(String[] args) {
  // 第一头母牛
  Cattle cow = new Cattle(0,3);
  cows.add(cow);

  // 40年
  for(int i=0;i<40;++i) {
  // 大于等于12岁的牛送到屠宰场卖掉;同时每年,所有的牛
  for(int j=0;j<cattles.size();++j) {
  Cattle temp = cattles.get(j);
  if(temp.getDead()) {
  cattles.remove(temp);
  }

  // 开始只有一头母猪,年龄不生长
  if(i>0) {
  cattles.get(j).grow();
  }
  }

  // 母牛生小牛
  for(int j=0;j<cows.size();++j) {
  Cattle calf = cows.get(j).bear();
  if(calf!=null) {
  if(calf.getSex()==0)
  cows.add(calf);
  cattles.add(calf);
  }
  }
  }

  System.out.println("40年后农夫拥有" + cattles.size() + "头牛");
  }
  }

  class Cattle {

  // 牛的雌雄:0代表雌,1代表雄
  private int sex;
  // 牛的年龄
  private int age;
  // 是否卖掉(已死)
  private boolean dead = false;

  public Cattle(int sex, int age) {
  this.sex = sex;
  this.age = age;
  }

  /**
  * 生小牛
  * @return 生出的小牛
  */
  public Cattle bear() {
  Cattle calf = null;
  if(this.sex==0) {
  if(this.age>=3 && this.age<=10) {
  calf = new Cattle(random(),0);
  } else {
  //System.out.println("抱歉,此牛太小或太老,不能生育。");
  }
  } else {
  //System.out.println("有没有搞错,公牛也想让它生小牛?");
  }
  return calf;
  }

  private int random() {
  return (int)Math.round(Math.random());
  }

  /**
  * 长大一岁,如果当前大于等于12岁,则卖掉
  */
  public void grow() {
  if(this.age>=12) dead = true;
  else this.age++;
  }

  public int getSex() {
  return this.sex;
  }

  public boolean getDead() {
  return this.dead;
  }
  }

  4.宴会桌旁
  在某宾馆的宴会厅里,有4位朋友正围桌而坐,侃侃而谈。他们用了中、英、法、日4种语言。现已知:
  A.甲、乙、丙各会两种语言,丁只会一种语言;
  B.有一种语言4人中有3人都会;
  C.甲会日语,丁不会日语,乙不会英语;
  D. 甲与丙、丙与丁不能直接交谈,乙与丙可以直接交谈;
  E. 没有人既会日语,又会法语。
  请问:甲乙丙丁各会什么语言?

  答案:
  第一题正解
  甲:中日
  乙:中法
  丙:英法
  丁:中

  5.借机发财
  从前有A、B两个相邻的国家,它们的关系很好,不但互相之间贸易交往频繁,货币可以通用,汇率也相同。也就是说A国的100元等于B国的100 元。可是两国关系因为一次事件而破裂了,虽然贸易往来仍然继续,但两国国王却互相宣布对方货币的100元只能兑换本国货币的90元。有一个聪明人,他手里 只有A国的100元钞票,却借机捞了一大把,发了一笔横财。请你想一想,这个聪明人是怎样从中发财的?

  答案:
  拿着A国100在A国换好B国的钱,然后再拿着换好的B国的钱去B国换A国的钱
  如此循环

  6.快马加鞭
  墨西哥农村现在仍然可以看到人们用马和驴运载货物。一位商人把四匹马从甲村拉到乙村,而从甲村到乙村,A马要花一小时,B马要花两小时,C马要花四小时,D马要花五小时。
  这位商人一次只能拉两匹马,回来时他还要骑一匹马,其中以走得慢的那匹马作为从甲村拉到乙村所需的时间。听说有人花了12小时就把四匹马全部从甲村拉到乙村,请问:他是如何办到的?

  答案:
  AB一起过B回来 4小时
  CD 一起过A回来 6小时
  AB 一起过 2小时
  一共12小时

  7.击鼠标
  击鼠标比赛现在开始!参赛者有拉尔夫、威利和保罗。
  拉尔夫10秒钟能击10下鼠标;威利20秒钟能击20下鼠标;保罗5秒钟能击5下鼠标。以上各人所用的时间是这样计算的;从第一击开始,到最后一击结束。
  他们是否打平手?如果不是,谁最先击完40下鼠标?

  答案:
  拉尔夫
  一个加速然后减速的过程。三个人平均速度相等。达到平均速度时间在中间的人可能性最大。

  8.感觉
  用第一感觉判断8+8=91这个等式正确吗?说明理由。

  答案:
  不正确。8+8=16

  9.谎话
  如果下列每个人说的话都是假话,那么是谁打碎了花瓶?
  夏克:吉姆打碎了花瓶。
  汤姆:夏克会告诉你谁打碎了花瓶。
  埃普尔:汤姆,夏克和我不太可能打碎花瓶。
  克力斯:我没打碎花瓶。
  艾力克:夏克打碎了花瓶,所以汤姆和埃普尔不太可能打碎花瓶。
  吉姆:我打碎了花瓶,汤姆是无辜的。

  答案:克力斯。吉姆的话有两个条件,只要一个为false就为false。

  10.大有作为
  鲁道夫、菲利普、罗伯特三位青年,一个当了歌手,一个考上大学,一个加入美军陆战队,个个未来都大有作为。现已知:
  A. 罗伯特的年龄比战士的大;
  B. 大学生的年龄比菲利普小;
  C. 鲁道夫的年龄和大学生的年龄不一样。
  请问:三个人中谁是歌手?谁是大学生?谁是士兵?

  歌手 大学 美军陆战队
  鲁道夫 X true
  菲利普 true X X
  罗伯特 true X
  由A B=》罗伯特比菲利普小比战士大。所以菲利普不是战士

  11.麻省理工大学的学生
  美国麻省理大学的学生来自不同国家。
  大卫、比利、特德三名学生,一个是法国人,一个是日本人,一个是美国人。现已知:
  1、 大卫不喜欢面条,特德不喜欢汉堡包;
  2、 喜欢面条的不是法国人;
  3、 喜欢汉堡包的是日本人;
  4、 比利不是美国人。
  请推测出这三名留学生分别来自哪些国家?

  答案:
  法国人 日本人 美国人
  大卫 true X
  比利 true X
  特德 X true
  喜欢汉堡的是日本人,特德不喜欢汉堡=》特德不是日本人
  喜欢汉堡的是日本人,所以喜欢面条的可暂假设也不是日本人=》美国人喜欢面条,大卫不喜欢面条=》大卫也不是美国人。所以特德是美国人
  喜欢面条的不是法国人可暂假设不喜欢面条的是法国人=》大卫是法国人
  所以=》 比利时日本人

  然后在那上面假设的结果挨个判断原题条件。每个条件都符合。所以以上假设成立。

  如需更多(包括各种面经,笔经)加我QQ:719116861。注明java!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-10-29
java兄弟连论坛有这样的面试题,有时间可以去看看
第2个回答  2010-10-29
shrmdgthftyyyyyyyyyyyyyteyhf
第3个回答  2010-10-29
动老金
第4个回答  2010-10-30
多看些 书 应该可以吧