一个Java题目是这样的:
有一只麻雀两棵树,每棵树每天长两片叶子
麻雀前三天在孵化,不吃树叶
第4,5,6天每天吃一片树叶
第7,8,9,10天每天吃两片树叶
第11,12,13,14天每天吃三片树叶
之后每天吃五片树叶
麻雀吃不够树叶会饿死,树被吃光叶子也会死
要求写出让麻雀存活最久的程序
我写的程序仅仅让麻雀存活了47天,当然这不是最好的设计,我觉得麻雀应该可以活的更久。
这个题目思路还是很简单的:设想一种情景,假设麻雀要吃8片树叶,第一颗树有4片,第二棵树有5片,首先麻雀肯定不会饿死。为了让麻雀存活,有一颗树肯定要死。
麻雀的吃法:先再一棵树上吃一片树叶,再到另一颗树上吃一片,再回到第一颗树上吃一片,以此往复。
每次吃树叶时,看到这颗树上的叶子大于1,才去吃,否则不能吃。
第一颗树不能吃,看第二棵能否吃,如果第二棵树也不能吃(即它仅剩最后一片叶子),那么就吃掉第二棵树最后一片叶子。然后树死亡。
树类有一个变量isAlive标记树是否死亡,如果树还活着,它才能继续生长。
麻雀类:
public class Sparrow {
public void eatStrategy(Tree tree1,Tree tree2,int num){
System.out.println("麻雀总共要吃 "+num+" 片树叶");
for(int i = 1;i<=num;i++){
if (i%2==0){
//吃第一颗树
if(!this.eat(tree1)){
//树上的叶子不够了,吃另一颗树的
if(!this.eat(tree2)){
//第二棵树叶子也不够
//吃它最后一片叶子
tree2.leaves.remove(0);
System.out.println("麻雀吃掉了Tree2的最后一片叶子");
}
}
}else {
if(!this.eat(tree2)){
//树上的叶子不够了,吃另一颗树的
if(!this.eat(tree1)){
//第二棵树叶子也不够
//吃它最后一片叶子
tree1.leaves.remove(0);
System.out.println("麻雀吃掉了Tree1的最后一片叶子");
}
}
}
}
}
public boolean eat(Tree tree){
//每次吃树叶时,看到这颗树上的叶子大于1,才去吃,否则不去吃。
if (tree.leaves.size()>1){
tree.leaves.remove(0);
System.out.println("麻雀吃了 1 片树叶");
return true;
}else {
return false;
}
}
public void die(){
System.out.println("麻雀吃不够树叶,饿死了");
}
//孵化
public void hatch(){
System.out.println("麻雀正在孵化中");
}
}
树类:
public class Tree {
private String name;
public Tree(String name){
this.name = name;
}
public ArrayList<Leaf> leaves = new ArrayList<>();
public boolean isAlive = true;//是否活着
//一天长两片叶子
public void grow(){
this.leaves.add(new Leaf());
this.leaves.add(new Leaf());
}
public void die(){
System.out.println("树叶吃完了,"+this.name+"死了");
this.isAlive = false;
}
public String getName(){
return name;
}
}
叶子类是个示意性类:
public class Leaf {
}
测试函数:
public class TestMain {
public static void main(String[] args) {
Tree tree1 = new Tree("1号树");
Tree tree2 = new Tree("2号树");
Sparrow sparrow = new Sparrow();
int num = 0;//吃树叶的数量
for (int i = 1;; i++) {
System.out.println("第" + i + "天:");
if (tree1.isAlive)
tree1.grow();
if (tree2.isAlive)
tree2.grow();
if (i <= 3) {
sparrow.hatch();
} else {
if (i > 3 && i < 7) {
num = 1;
} else if (i >= 7 && i <= 10) {
num = 2;
} else if (i >= 11 && i <= 14) {
num = 3;
} else {
num = 5;
}
try {
sparrow.eatStrategy(tree1, tree2, num);
} catch (IndexOutOfBoundsException e) {
sparrow.die();
break;
}
}
System.out.println(tree1.getName()+"的叶子:" + tree1.leaves.size());
System.out.println(tree2.getName()+"的叶子:" + tree2.leaves.size());
if (tree1.leaves.size() == 0) {
tree1.die();
}
if (tree2.leaves.size() == 0) {
tree2.die();
}
}
}
}
结果打印:
第1天:
麻雀正在孵化中
1号树的叶子:2
2号树的叶子:2
第2天:
麻雀正在孵化中
1号树的叶子:4
2号树的叶子:4
第3天:
麻雀正在孵化中
1号树的叶子:6
2号树的叶子:6
第4天:
麻雀总共要吃 1 片树叶
麻雀吃了 1 片树叶
1号树的叶子:8
2号树的叶子:7
第5天:
麻雀总共要吃 1 片树叶
麻雀吃了 1 片树叶
1号树的叶子:10
2号树的叶子:8
第6天:
麻雀总共要吃 1 片树叶
麻雀吃了 1 片树叶
1号树的叶子:12
2号树的叶子:9
第7天:
麻雀总共要吃 2 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
1号树的叶子:13
2号树的叶子:10
第8天:
麻雀总共要吃 2 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
1号树的叶子:14
2号树的叶子:11
第9天:
麻雀总共要吃 2 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
1号树的叶子:15
2号树的叶子:12
第10天:
麻雀总共要吃 2 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
1号树的叶子:16
2号树的叶子:13
第11天:
麻雀总共要吃 3 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
1号树的叶子:17
2号树的叶子:13
第12天:
麻雀总共要吃 3 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
1号树的叶子:18
2号树的叶子:13
第13天:
麻雀总共要吃 3 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
1号树的叶子:19
2号树的叶子:13
第14天:
麻雀总共要吃 3 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
1号树的叶子:20
2号树的叶子:13
第15天:
麻雀总共要吃 5 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
1号树的叶子:20
2号树的叶子:12
第16天:
麻雀总共要吃 5 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
1号树的叶子:20
2号树的叶子:11
第17天:
麻雀总共要吃 5 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
1号树的叶子:20
2号树的叶子:10
第18天:
麻雀总共要吃 5 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
1号树的叶子:20
2号树的叶子:9
第19天:
麻雀总共要吃 5 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
1号树的叶子:20
2号树的叶子:8
第20天:
麻雀总共要吃 5 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
1号树的叶子:20
2号树的叶子:7
第21天:
麻雀总共要吃 5 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
1号树的叶子:20
2号树的叶子:6
第22天:
麻雀总共要吃 5 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
1号树的叶子:20
2号树的叶子:5
第23天:
麻雀总共要吃 5 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
1号树的叶子:20
2号树的叶子:4
第24天:
麻雀总共要吃 5 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
1号树的叶子:20
2号树的叶子:3
第25天:
麻雀总共要吃 5 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
1号树的叶子:20
2号树的叶子:2
第26天:
麻雀总共要吃 5 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
1号树的叶子:20
2号树的叶子:1
第27天:
麻雀总共要吃 5 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
1号树的叶子:19
2号树的叶子:1
第28天:
麻雀总共要吃 5 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
1号树的叶子:18
2号树的叶子:1
第29天:
麻雀总共要吃 5 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
1号树的叶子:17
2号树的叶子:1
第30天:
麻雀总共要吃 5 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
1号树的叶子:16
2号树的叶子:1
第31天:
麻雀总共要吃 5 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
1号树的叶子:15
2号树的叶子:1
第32天:
麻雀总共要吃 5 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
1号树的叶子:14
2号树的叶子:1
第33天:
麻雀总共要吃 5 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
1号树的叶子:13
2号树的叶子:1
第34天:
麻雀总共要吃 5 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
1号树的叶子:12
2号树的叶子:1
第35天:
麻雀总共要吃 5 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
1号树的叶子:11
2号树的叶子:1
第36天:
麻雀总共要吃 5 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
1号树的叶子:10
2号树的叶子:1
第37天:
麻雀总共要吃 5 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
1号树的叶子:9
2号树的叶子:1
第38天:
麻雀总共要吃 5 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
1号树的叶子:8
2号树的叶子:1
第39天:
麻雀总共要吃 5 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
1号树的叶子:7
2号树的叶子:1
第40天:
麻雀总共要吃 5 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
1号树的叶子:6
2号树的叶子:1
第41天:
麻雀总共要吃 5 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
1号树的叶子:5
2号树的叶子:1
第42天:
麻雀总共要吃 5 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
1号树的叶子:4
2号树的叶子:1
第43天:
麻雀总共要吃 5 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
1号树的叶子:3
2号树的叶子:1
第44天:
麻雀总共要吃 5 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
1号树的叶子:2
2号树的叶子:1
第45天:
麻雀总共要吃 5 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
1号树的叶子:1
2号树的叶子:1
第46天:
麻雀总共要吃 5 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃掉了Tree1的最后一片叶子
1号树的叶子:0
2号树的叶子:1
树叶吃完了,1号树死了
第47天:
麻雀总共要吃 5 片树叶
麻雀吃了 1 片树叶
麻雀吃了 1 片树叶
麻雀吃不够树叶,饿死了