/**
* 一群牛的故事
*/
import java.util.ArrayList;
import java.util.List;
/**
* 母牛
* @author dinghun8leech
*/
class Cow {
/** age 年龄 */
private int age;
/**
* 默认构造方法,创建(生产)一头年龄为1岁的小母牛
*/
public Cow() {
age = 1;
}
public Cow(int a) {
age = a;
}
/**
* 成长,母牛年龄+1
*/
public void grow() {
++age;
}
/**
* 生产,当母牛年龄在5岁或以上时产生1头小母牛
* 年龄低于5岁时无法生产,返回null
* @return Cow 一头年龄为1岁的小母牛
*/
public Cow produce() {
if (age > 4) {
return new Cow();
}
return null;
}
}
/**
* 怪兽牧场
* @author dinghun8leech
*/
public class CowCount {
public static void main(String [] args) {
int year = 20;//测试年限
int init_cow_count = 1;//牧场起始小母牛数量
List<Cow> cows = new ArrayList<Cow>();//牛棚
for (int i=0;i<init_cow_count;i++) {
cows.add(new Cow(5));
}
for (int i=0;i<year;i++) {
int cow_count = cows.size();
for (int j=0;j<cow_count;j++) {//每年都遍历一下牛棚中的所有牛
Cow cow = cows.get(j);
cow.grow();//每年都会成长
Cow newCow = cow.produce();
if (newCow != null) {//看看当前年龄能否生产小牛
cows.add(newCow); //这里的编程技巧,cows是扩充的,用一个变量来控制下标
}
}
}
System.out.println("怪兽牧场"+year+"后的母牛数从"+init_cow_count+"头增长到"+cows.size()+"头。");
}
} 结果:
怪兽牧场20后的母牛数从1头增长到907头。
改cow.grow();的位置/**
* 一群牛的故事
*/
import java.util.ArrayList;
import java.util.List;
/**
* 母牛
* @author dinghun8leech
*/
class Cow {
/** age 年龄 */
private int age;
/**
* 默认构造方法,创建(生产)一头年龄为1岁的小母牛
*/
public Cow() {
age = 1;
}
public Cow(int a) {
age = a;
}
/**
* 成长,母牛年龄+1
*/
public void grow() {
++age;
}
/**
* 生产,当母牛年龄在5岁或以上时产生1头小母牛
* 年龄低于5岁时无法生产,返回null
* @return Cow 一头年龄为1岁的小母牛
*/
public Cow produce() {
if (age > 4) {
return new Cow();
}
return null;
}
}
/**
* 怪兽牧场
* @author dinghun8leech
*/
public class CowCount {
public static void main(String [] args) {
int year = 20;//测试年限
int init_cow_count = 1;//牧场起始小母牛数量
List<Cow> cows = new ArrayList<Cow>();//牛棚
for (int i=0;i<init_cow_count;i++) {
cows.add(new Cow(5));
}
for (int i=0;i<year;i++) {
int cow_count = cows.size();
for (int j=0;j<cow_count;j++) {//每年都遍历一下牛棚中的所有牛
Cow cow = cows.get(j);
Cow newCow = cow.produce();
if (newCow != null) {//看看当前年龄能否生产小牛
cows.add(newCow); //这里的编程技巧,cows是扩充的,用一个变量来控制下标
}
cow.grow();//每年都会成长
}
}
System.out.println("怪兽牧场"+year+"后的母牛数从"+init_cow_count+"头增长到"+cows.size()+"头。");
}
}
结果:怪兽牧场20后的母牛数从1头增长到431头。
求教答案
* 一群牛的故事
*/
import java.util.ArrayList;
import java.util.List;
/**
* 母牛
* @author dinghun8leech
*/
class Cow {
/** age 年龄 */
private int age;
/**
* 默认构造方法,创建(生产)一头年龄为1岁的小母牛
*/
public Cow() {
age = 1;
}
public Cow(int a) {
age = a;
}
/**
* 成长,母牛年龄+1
*/
public void grow() {
++age;
}
/**
* 生产,当母牛年龄在5岁或以上时产生1头小母牛
* 年龄低于5岁时无法生产,返回null
* @return Cow 一头年龄为1岁的小母牛
*/
public Cow produce() {
if (age > 4) {
return new Cow();
}
return null;
}
}
/**
* 怪兽牧场
* @author dinghun8leech
*/
public class CowCount {
public static void main(String [] args) {
int year = 20;//测试年限
int init_cow_count = 1;//牧场起始小母牛数量
List<Cow> cows = new ArrayList<Cow>();//牛棚
for (int i=0;i<init_cow_count;i++) {
cows.add(new Cow(5));
}
for (int i=0;i<year;i++) {
int cow_count = cows.size();
for (int j=0;j<cow_count;j++) {//每年都遍历一下牛棚中的所有牛
Cow cow = cows.get(j);
cow.grow();//每年都会成长
Cow newCow = cow.produce();
if (newCow != null) {//看看当前年龄能否生产小牛
cows.add(newCow); //这里的编程技巧,cows是扩充的,用一个变量来控制下标
}
}
}
System.out.println("怪兽牧场"+year+"后的母牛数从"+init_cow_count+"头增长到"+cows.size()+"头。");
}
} 结果:
怪兽牧场20后的母牛数从1头增长到907头。
改cow.grow();的位置/**
* 一群牛的故事
*/
import java.util.ArrayList;
import java.util.List;
/**
* 母牛
* @author dinghun8leech
*/
class Cow {
/** age 年龄 */
private int age;
/**
* 默认构造方法,创建(生产)一头年龄为1岁的小母牛
*/
public Cow() {
age = 1;
}
public Cow(int a) {
age = a;
}
/**
* 成长,母牛年龄+1
*/
public void grow() {
++age;
}
/**
* 生产,当母牛年龄在5岁或以上时产生1头小母牛
* 年龄低于5岁时无法生产,返回null
* @return Cow 一头年龄为1岁的小母牛
*/
public Cow produce() {
if (age > 4) {
return new Cow();
}
return null;
}
}
/**
* 怪兽牧场
* @author dinghun8leech
*/
public class CowCount {
public static void main(String [] args) {
int year = 20;//测试年限
int init_cow_count = 1;//牧场起始小母牛数量
List<Cow> cows = new ArrayList<Cow>();//牛棚
for (int i=0;i<init_cow_count;i++) {
cows.add(new Cow(5));
}
for (int i=0;i<year;i++) {
int cow_count = cows.size();
for (int j=0;j<cow_count;j++) {//每年都遍历一下牛棚中的所有牛
Cow cow = cows.get(j);
Cow newCow = cow.produce();
if (newCow != null) {//看看当前年龄能否生产小牛
cows.add(newCow); //这里的编程技巧,cows是扩充的,用一个变量来控制下标
}
cow.grow();//每年都会成长
}
}
System.out.println("怪兽牧场"+year+"后的母牛数从"+init_cow_count+"头增长到"+cows.size()+"头。");
}
}
结果:怪兽牧场20后的母牛数从1头增长到431头。
求教答案
第一个方法先增加年龄,再判断是否能生小牛
第二个方法先判断能否生小牛,然后再增加年龄。
结果当然不一样了。
public static void main(String[] args) {
int year = 20;
Cow cow1 = new Cow();//初始的一头牛
List<Cow> cows = new ArrayList<Cow>();
cows.add(cow1);
for(int i = 0; i < year; i++){//遍历20年~~~~~~~
for(int j = 0;j < cows.size();j++){//每年遍历所有牛~~~~~
Cow cownew = cows.get(j).produce();//赶进牛棚生产,看看是否生牛
cows.get(j).grow();//每头牛每年涨一岁
if(cownew != null){//判断这头牛是否生出小牛,生出就加到数组中
cows.add(cownew);
}
}
}
System.out.println(cows.size());//数组中一共有多少头牛 答案 250头牛
}
不知道对不对,但我感觉思路是这样的~~~~~~~~~~~
package com.success.cow;import java.util.ArrayList;
/**
* 母牛类
*/
public class Cow {
private int age = 0; public Cow(int age) {
this.age = age;
} public void happyBirthday(ArrayList<Cow> cows) {
age++;
if (age >= 4) {
cows.add(new Cow(0));
}
}
}
package com.success.cow;import java.util.ArrayList;
public class Mooooo {
public static void main(String[] args) {
ArrayList<Cow> cows = new ArrayList<Cow>();
cows.add(new Cow(4));
for (int i = 0; i < 20; i++) {
ArrayList<Cow> newCows = new ArrayList<Cow>();
for (Cow cow : cows) {
cow.happyBirthday(newCows);
}
cows.addAll(newCows); if(i == 4) {
System.out.println(cows.size());
}
}
System.out.println("二十年共有牛 " + cows.size() + " 头。");
}
}7
二十年共有牛 907 头。
这是另一个解决方案 看起来也对, 答案也是907头,你的方案看起来对,但是结果我感觉不对
对了是这样的,在你的代码中Cow cow1 = new Cow();//初始的一头牛初始的是一头一岁的牛,它必须到四年后才能生小牛,应该改为这样Cow cow1 = new Cow(5);//初始的一头牛
这样最后的结果就变成了907头