HDoj 2018 母牛的故事

时间:2020-03-18 21:01:53   收藏:0   阅读:47
Problem Description
有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?
 

 

Input
输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。
n=0表示输入数据的结束,不做处理。
 

 

Output
对于每个测试实例,输出在第n年的时候母牛的数量。
每个输出占一行。
 

 

Sample Input
2 4 5 0
 

 

Sample Output
2 4 6
 

 

Author
lcy
 

 

Source
 

 

Recommend
lcy   |   We have carefully selected several similar problems for you:  2041 2046 2044 2045 2050 
 
我的解法:将一岁,两岁,三岁,四岁的母牛分别定义变量n1,n2,n3,n4,每过去一年,一岁的变为两岁,两岁的变为三岁,三岁的变为四岁,而每个四岁的又能产下一岁的小母牛。这样不断循环,最后输出n1到n4之和
C语言代码如下:
#include<stdio.h>
int main()
{
    int years;
    int n1,n2,n3,n4;
    while(scanf("%d",&years)!=EOF)
    {
        n1=n2=n3=0;
        n4=1;
        if(years ==0)
            break;
        for(int i=1;i<years;i++)
        {
            n4+=n3;
            n3=0;
            n3+=n2;
            n2=0;
            n2+=n1;
            n1=0;
            n1+=n4;    
        }    
        printf("%d\n",n1+n2+n3+n4);    
    }
} 

 

 

 

 

第二种解法:

斐波那契数列,设年数为 i ,如果年数小于四,则母牛的数量是每年增加一只(只有最初的母牛可以产下小母牛),在第四年之后(也就是第五年,因为定义的数组下标是从0开始,所以是i==4时),母牛的个数变为a[i-1]+a[i-3]   (意思为前一年的母牛数加上前面第三年的母牛数,因为前第三年的母牛在今年每只都可以产下一只小母牛),最后得出总共的母牛数a[i-1](因为在跳出循环后 i 多增了一次1)

C语言代码如下:

#include<stdio.h>
int main()
{
    int a[100];
    a[0]=1;
    int years,i;
    while(scanf("%d",&years)!=EOF)
    {
        if(years==0)
            break;
        for(i=1;i<years;i++)
        {
            if(i<4)
                a[i]=a[i-1]+1;
            else
                a[i]=a[i-1]+a[i-3]; 
        }
        printf("%d\n",a[i-1]);
    }
}

 

 

原文:https://www.cnblogs.com/wzmm/p/12518914.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!