题目要求
农场一头大母牛,
每年生头小母牛,
母牛五岁产母牛,
二十年上多少牛?
Farm.javaimport java.util.Vector;
public class Farm { private Vector<Cow> cows=new Vector<Cow>(); //农场的牛群,用vector盛放 private int count=0; //农场的总牛数 //得到总牛数 public int getCount() { count=cows.size(); return count; } //增加一头牛 public void addCow(){ this.cows.addElement(new Cow()); } //农场进入下一年,满了5岁的牛就产崽并长一岁,没满的就只长一岁 public void nextYear(){ Cow c=new Cow();
int before=cows.size(); for(int i=0;i<before;i++){ //写成 for(int i=0;i<cows.size();i++) 结果就不一样 c=cows.get(i); if(c.getAge()>=5){ c.grow(); c.lay(this); } else{ c.grow(); } } } //为了显示方便,我就直接把main写在Farm类里面了 public static void main(String [] args){ Farm farm=new Farm(); farm.addCow(); for(int i=1;i<=20;i++){ farm.nextYear(); System.out.println("第 "+i+"年有牛 :"+farm.getCount()); } }}//母牛类class Cow { private int age; /* public Cow(){ this.age=0; }*/ public void grow(){ this.age++; } public int getAge(){ return age; } public void lay(Farm f){ f.addCow(); }}
农场一头大母牛,
每年生头小母牛,
母牛五岁产母牛,
二十年上多少牛?
Farm.javaimport java.util.Vector;
public class Farm { private Vector<Cow> cows=new Vector<Cow>(); //农场的牛群,用vector盛放 private int count=0; //农场的总牛数 //得到总牛数 public int getCount() { count=cows.size(); return count; } //增加一头牛 public void addCow(){ this.cows.addElement(new Cow()); } //农场进入下一年,满了5岁的牛就产崽并长一岁,没满的就只长一岁 public void nextYear(){ Cow c=new Cow();
int before=cows.size(); for(int i=0;i<before;i++){ //写成 for(int i=0;i<cows.size();i++) 结果就不一样 c=cows.get(i); if(c.getAge()>=5){ c.grow(); c.lay(this); } else{ c.grow(); } } } //为了显示方便,我就直接把main写在Farm类里面了 public static void main(String [] args){ Farm farm=new Farm(); farm.addCow(); for(int i=1;i<=20;i++){ farm.nextYear(); System.out.println("第 "+i+"年有牛 :"+farm.getCount()); } }}//母牛类class Cow { private int age; /* public Cow(){ this.age=0; }*/ public void grow(){ this.age++; } public int getAge(){ return age; } public void lay(Farm f){ f.addCow(); }}
但size增加了,for语句又会遍历它,这头就得执行else语句了,所以预先保留需要增长年龄和生小牛的母牛集合就有必要了,
有一对老耗子,每个月都生一对小耗子,
小耗子长到第三个月后(即从第四个月开始)
每个月又生一对小耗子,
假如耗子都不死,问2年后一共多少只耗子#include <stdio.h>
int main()
{
int can[24] = {2, 2, 2};//can[0]表示1月有生育能力的耗子
int cannot[24] = {2, 4, 6};//cannot[0]表示1月没有生育能力的耗子
int i = 0;
int rst;
for(i = 3; i < 23; i++)
{
can[i + 1] = can[i] + cannot[i - 2];
cannot[i + 1] = cannot[i] - cannot[i - 2] + can[i + 1];
}
rst = can[23] + cannot[23];
printf("%d\n", rst);
return 0;
}
import java.util.ArrayList;public class Farm {
List<Cow> cow = new ArrayList<Cow>();
public int getCount(){
return this.cow.size();
}
public void addCow(){
this.cow.add(new Cow());
}
public void addCow(int age){
this.cow.add(new Cow(5));
}
public void nextYear(){
//int before = cow.size();
for(int i=0;i<cow.size();i++){ //这样不行么 为何一定要定义一个befor变量
if(cow.get(i).getAge()>=5){
cow.get(i).lays(this);
cow.get(i).grow();
}else
cow.get(i).grow();
}
}
public static void main(String args[]){
Farm f = new Farm();
f.addCow(5);
for(int i=1;i<20;i++){
f.nextYear();
System.out.println("第"+i+"年一共有"+f.getCount()+"头牛");
}
}
}class Cow{
int age;
public Cow(){
this.age=0;
}
public Cow(int age){
this.age=age;
}
public int getAge(){
return this.age;
}
public void grow(){
age++;
}
public void lays(Farm f){
f.addCow();
}
}
package CSDN;import java.util.Scanner;public class alltext {
public static void main(String[] args){
int year;
int totalCow = 0;
Scanner input = new Scanner(System.in);
System.out.println("plase input the year:");
year = input.nextInt();
//计算牛的总数
for (int i = 1; i <= year; i++) {
totalCow = totalCow + new alltext().cow(i);
}
System.out.println(totalCow);
}//计算某一年牛的数目的方法
public int cow(int year){
int count = 0;
if(year < 5){
count = year;
}else if(year >= 5){
count = year + (year-3);
}
return count;
}
}
//初学java,各位大侠看看怎样?
import java.util.Vector;public class Farm { private Vector<Cow> cows = new Vector<Cow>(); // 农场的牛群,用vector盛放
public Farm(){
Cow cow = new Cow();
cow.setAge(6);
cows.addElement(cow);
}
private int count = 0; // 农场的总牛数 // 得到总牛数 public int getCount() {
count = cows.size();
return count; } // 增加一头牛 public void addCow() {
Cow cow = new Cow();
cow.setAge(1);
this.cows.addElement(cow);
} // 农场进入下一年,满了5岁的牛就产崽并长一岁,没满的就只长一岁 public void nextYear() { int before = cows.size(); for (int i = 0; i < before; i++) { // 写成 for(int i=0;i<cows.size();i++)
// 结果就不一样
// c=cows.get(i);
if (cows.get(i).getAge() >= 5) {
cows.get(i).grow();
cows.get(i).lay(this);
}
else {
cows.get(i).grow();
} } } // 为了显示方便,我就直接把main写在Farm类里面了 public static void main(String[] args) { Farm farm = new Farm();
for (int i = 1; i <= 20; i++) {
farm.nextYear();
System.out.println("第 " + i + "年有牛 :" + farm.getCount());
}
}
}// 母牛类class Cow { private int age; /*
* public Cow(){
*
* this.age=0; }
*/ public void grow() { this.age++; } public int getAge() { return age; }
public void setAge(int i) {
this.age =i;
} public void lay(Farm f) { f.addCow(); }}
//农场进入下一年,满了5岁的牛就产崽并长一岁,没满的就只长一岁 public void nextYear(){ Cow c=new Cow(); 那这里又新建Cow对象 这里的C对象永远都是0岁?那下面的IF条件大于5永远不成立? 除此之外 还是不懂为什么要弄一个before变量
或者通过倒序来remove
int l=c.length,_l=l;
System.out.print(l+" ");
for(int a:c){
if(a>=5){
_l++;
}
System.out.print(a+",");
}
System.out.println();
if(y==0){
return c;
}
//B
int[] _c=new int[_l];
for(int i=0,_i=l,a;i<l;i++){
a=c[i];
if(a>=5){
_c[_i++]=1;
}
_c[i]=++a;
}
return B(_c,--y);
}
public static void main(String[] args){
int[] c=new int[]{5};
B(c,6);
}
1 2 3 4 5 6
F(n) = n (n < 7)
F(n) = F(n - 1) + F(n - 5) public static long cowCount(int year){
return year < 7 ? year : cowCount(year - 1) + cowCount(year - 5);
}
递归,或者循环都可以实现
递归代码简单,循环效率高
下面是用循环的public static long cowCount(int year)
{
long[] cowCnt=new cowCnt[year+1];//也可以用变量储存,用数组更清晰一点,但是略占空间复杂度
for(int i=0;i<=year;++i)
{
if(year<6)
{
cowCnt[i]=i+1;
}
else
{
cowCnt[i]=cowCnt[i-1]+cowCnt[i-5];
}
}
return cowCnt[year];
}