此题,我暂只能提供两种计算方法,大同小异,方法一用的是循环,方法二用的是Math类的数学方法。能力有限,如阳哥有纯面向对象的方法或优化方法,请贴在回复上,以便于我学习。谢谢阳哥!{:soso_e163:}
方法一:
class Cow {//定义牛类
int num ;//农夫养牛的数量
int year;//农夫养牛的时间
Cow (int start) {//构造函数,指定初始牛数量
num = start;
}
public int count (int year) {//该方法计算year年后,牛的数量
this.year = year;
for(int i=1;i<=year;i++) {//方法一:用循环方法
if(i%3==0)//每三年,让num值增一倍
num *= 2;
}
return num;
}
}
class CountCow {//单独计算一个牛数量的类
public static void main(String[] args) {
Cow c = new Cow(1);//构造函数对牛数量进行初始化
c.count(10);//调用count方法计算10年后牛的数量,
System.out.println(c.year + "年后,牛的总数为:" + c.num);//打印输出结果,输出内容比较人性化哦。
}
}
方法二:
class Cow {//定义牛类
int num ;//农夫养牛的数量
int year;//农夫养牛的时间
Cow (int start) {//构造函数,指定初始牛数量
num = start;
}
public double count (int year) {//该方法计算year年后,牛的数量
this.year = year;
num = num *(int) Math.pow(2,year/3);//用了java.lang包里的Math类的求幂方法。
return num;
}
}
class CountCow {//单独计算一个牛数量的类
public static void main(String[] args) {
Cow c = new Cow(1);//构造函数对牛数量进行初始化
c.count(10);//调用count方法计算10年后牛的数量,
System.out.println(c.year + "年后,牛的总数为:" + c.num);//打印输出结果,输出内容比较人性化哦。
}
}
// 递归方法
private static void CowCount(int i, int j) {
i++;//年数
j++;//牛的年龄
if (i <= Cow.year) {
if (j >= 3) {
count++;
CowCount(i, 0);
}
CowCount(i, j);
}
}
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.print("请输入需要查询的年数: ");
int year = s.nextInt();
new Cow().setYear(year);
System.out.println(year + "年后牛的数量为: " + count);
}
}