Java代码农夫与牛 农夫和牛牛是什么意思-成都快上网建站

Java代码农夫与牛 农夫和牛牛是什么意思

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

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

创新互联是一家专业提供兴文企业网站建设,专注与成都网站建设、网站制作H5场景定制、小程序制作等业务。10年已为兴文众多企业、政府机构等服务。创新互联专业网站建设公司优惠进行中。

答案

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

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

* @version 1.0

*/

public class ComputeCattleNum {

// 保存所有母牛

private static ListCattle cows = new ArrayListCattle();

// 保存所有当前农夫拥有的牛

private static ListCattle cattles = new ArrayListCattle();

public static void main(String[] args) {

// 第一头母牛

Cattle cow = new Cattle(0,3);

cows.add(cow);

// 40年

for(int i=0;i40;++i) {

// 大于等于12岁的牛送到屠宰场卖掉;同时每年,所有的牛

for(int j=0;jcattles.size();++j) {

Cattle temp = cattles.get(j);

if(temp.getDead()) {

cattles.remove(temp);

}

// 开始只有一头母猪,年龄不生长

if(i0) {

cattles.get(j).grow();

}

}

// 母牛生小牛

for(int j=0;jcows.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!

JAVA编程的逻辑题,大神帮下!谢谢

方法一:

import java.util.ArrayList;

import java.util.List;

public class test10 {

// 解题思路:先带走猫,后带走狗,再把猫带回,把鱼带过去,最后再把猫带过去即可

// 定义两个集合,存放,带过去的动物,和剩下的动物

static ListString there = new ArrayListString();

static ListString here = new ArrayListString();

public static void main(String[] args) {

here.add("cat");

here.add("dog");

here.add("fish");

test10 test10 = new test10();

test10.take();

}

// 判断动物是否安全

public boolean isSafty(ListString list) {

// 如果一个集合中同时出现了猫和狗,猫和鱼的都认为不安全

if (list.add("dog") list.add("cat") || list.add("cat")

list.add("fish")) {

return false;

}

return true;

}

public void take() {

// 得到要带走的动物

String anim = here.get(0);

// 从剩下的集合中删除

here.remove(here.get(0));

if (anim.equals("cat")) {

// 添加到以带过去的集合里面

there.add(anim);

// 继续带下一个动物

if (here.isEmpty()) {

System.out.println();

System.out.println("最后在把" + anim + "带走了");

return;

} else {

System.out.println("带走了" + anim);

System.out.print("剩下:");

for (String s : here) {

System.out.print(s + " ");

}

System.out.println();

System.out.println("----------------------------");

take();

}

} else if (anim.equals("dog")) {

there.add(anim);

System.out.println("然后把" + anim + "带走");

// 判断是否安全,之后继续带下一个动物

if (isSafty(there)) {

take();

} else {

String animal = there.get(0);

there.remove(animal);

here.add(animal);

System.out.println("然后把" + animal + "带回");

// 继续带下一个动物

take();

}

} else if (anim.equals("fish")) {

System.out.print("之后把" + anim + "带走");

take();

}

}

}

方法二:

import java.util.ArrayList;

import java.util.Random;

/*

* 需求:

* 一位老农带着猫、狗、鱼过河,河边有一条船,每次老农只能带一只动物过河。

* 当老农不和猫狗鱼在一起时,狗会咬猫,猫会吃鱼,当老农和猫狗鱼在一起时,则不会发生这种问题。

* 编程解决猫狗鱼过河问题。

* 分析:

* 定义猫,狗,鱼元素.定义两岸集合.定义方法判断不和谐状况.

* 步骤:

* 1.将猫狗鱼抽象为三个String型变量.将两岸抽象为两个集合.

* 2.定义判断是否和谐方法.

* */

public class Test10 {

public static void main(String[] args) {

//开始过河.

doTransport();

}

public static void doTransport() {

// 抽象出猫,鱼,狗和两岸.

ArrayListString arr1 = new ArrayListString();

ArrayListString arr2 = new ArrayListString();

arr1.add("鱼");

arr1.add("猫");

arr1.add("狗");

// 农夫将要携带到船上动物.(前一字符表示农夫当前携带动物,后一字符表示上次农夫携带的动物,为了让农夫不出现重复拿同一个动物的情况)

System.out.println("农夫,猫,鱼,狗都在此岸,开始过河.\n");

String[] boat ={"-","-"};

while (arr1.size() 0) {

move(arr1, arr2, boat);

}

System.out.println("\n农夫,猫,鱼,狗都到达彼岸.");

}

public static void move(ArrayListString arr1, ArrayListString arr2,String[] boat) {

//农夫船上是否有动物,有则不需随机选择携带.

if (boat[0].equals("-")) {

int one=0;

do{

// 农夫从此岸随机带上一个动物.

one = new Random().nextInt(arr1.size());

}while(arr1.get(one).equals(boat[1]));

boat[1]=boat[0];

boat[0] = arr1.get(one);

arr1.remove(one);

}

// 判断此岸是否和谐

if (ifNice(arr1)) {

// 此岸和谐,农夫则将动物送去彼岸.

arr2.add(boat[0]);

System.out.println("---农夫带" + boat[0] + "去彼岸 ");

//首先判断是否将三个动物都放彼岸,是则无需判断是否和谐.

if(arr2.size()==3){

return;

}

// 判断彼岸是否和谐.

if (ifNice(arr2)) {

// 彼岸和谐,农夫则完成此次运送.

boat[1]=boat[0];

boat[0] ="-";

System.out.println(" 农夫单独回此岸---");

} else {

// 彼岸不和谐,农夫则将岸上动物与携带动物交换.送回此岸.

boat[0]=arr2.get(0);

System.out.println(" 农夫带" +boat[0]+ "回此岸---");

arr2.remove(0);

arr1.add(boat[0]);

boat[1]=boat[0];

boat[0]="-";

}

} else {

// 如果此岸不和谐则放回此岸.

arr1.add(boat[0]);

boat[1]=boat[0];

boat[0]="-";

}

}

public static boolean ifNice(ArrayListString arr) {// 判断是能否共存.

if ((arr.contains("猫") arr.contains("狗"))

|| (arr.contains("鱼") arr.contains("猫"))) {

return false;

} else {

return true;

}

}

}

农夫巧妙分牛

设农夫一共留下了x头牛,则他妻子分得的牛就有(x/2+1/2)头;长子分得的牛有[x-(x/2+1/2)]/2+1/2头 ,化简以后为(x/4+1/4)头;同理可得,次子分得的牛有(x/8+1/8)头;长女分得的牛有(x/16+1/16)头。分出去的牛总数应等于农夫一共留下的牛头数,因此可建立如下方程:(x/2+1/2)+(x/4+1/4)+(x/8+1/8)+(x/16+1/16)=x解得:x=15,即农夫一共留下了15头牛。

java版农夫过河

先把羊带过去

回去

把狼带过去

把羊带回去

把白菜带过去

回去

把羊带过去


分享标题:Java代码农夫与牛 农夫和牛牛是什么意思
本文网址:http://kswjz.com/article/ddedgcp.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流