母鸡算法
有一道题:
有一只母鸡,每月生一只小母鸡,小母鸡长到每第四个月后每月又生一只小小母鸡,问20个月后母鸡的总数为多少?
写一个程程序解决这个问题
刚遇到的难题, 求一个合适的解决方案, 附代码。
------解决方案--------------------一般有两种方法:
1. 笨办法,计下所有的鸡
2. 找数学规律
[code=Jav]import java.util.ArrayList;
import java.util.List;
public class HenGrow {
public static void main(String[] args) {
final int month = 20;
// 方法1: 记录所有的鸡
List <Integer> hen1 = new ArrayList <Integer>();
hen1.add(100);
for (int i = 1; i <= month; ++i) {
int size = hen1.size();
for (int j = 0; j < size; ++j) {
hen1.set(j, hen1.get(j) + 1);
if (hen1.get(j) >= 4) {
hen1.add(0);
}
}
}
System.out.println(hen1.size());
// 方法2: 本月的鸡数为上一个月的鸡数 + 前4个月的鸡数 (可以生小鸡了,不过鸡好像不是生出来的)
List <Integer> hen2 = new ArrayList <Integer>();
hen2.add(2); // 第一个月有2只鸡: 母鸡+生的一只小鸡
hen2.add(3); // 第二个月有3只鸡
hen2.add(4); // 第三个月有4只鸡
hen2.add(5); // 第四个月有5只鸡
// 从第五个月开始,第一个月生的小鸡可以生小鸡鸡了
for (int i = 5; i <= month; ++i) {
hen2.add(hen2.get(i - 1 - 1) + hen2.get(i - 1 - 4));
}
System.out.println(hen2.get(month - 1));
}
}[/code]
------解决方案--------------------答案就是 2745.。
想起我以前做过的一道非常类似的,只是用C语言描述的:
题目:
有一头母牛,从出生起第四个年头开始每年生一头母牛,第n年几头?
[code=Jav]
#include <stdio.h>
void main()
{
/*y1表示1岁,y2...,y3..没有y4,是因为到了第四年,就可以生了,所以身份是母亲*/
int sum,mother=1,y1,y2,y3,n;
printf("Enter the Year(n)=: ");
scanf("%d",&n);
if(0 <n&&n <4) sum=n;
if(n>=4)
{
for(y1=1,y2=1,y3=1;n>=4;n--)//第6年后,刚好y1,y2,y3都为1。此后每过一年...
{
mother=mother+y3; //三岁的变成母亲。
y3=y2; //2岁的成了三岁
y2=y1; //1岁的--->二岁
y1=mother; //所有的母亲每一年都生下小牛(y1)
sum=mother+y1+y2+y3;
}
}
printf("Sum = %d\n",sum);
}
[/code]
09年前写的 母牛四年生一只...
几本都一样的。