您的位置:首页 > 其它

hdu 2018 母牛的故事

2013-07-26 17:35 232 查看

母牛的故事

Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 21 Accepted Submission(s) : 14

Font: Times New Roman | Verdana | Georgia

Font Size: ← →

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

C语言程序设计练习(三)

题目乍一看挺容易的(其实也不难,就看你想不想的到了),当去推导时,发现结果是:

1,2,3,4,6,9,13,19,28,41,60,88,129.....

推导过程是:

母牛[A.s] 一岁[A.a] 两岁[A.b] 三岁[A.c] 四岁[A.d] 共计[A.sum]

1 1 0 0 0 0 1

2 1 1 0 0 0 2=1+1

3 1 1 1 0 0 3=1+1+1

4 1 1 1 1 0 4=1+1+1+1

5 2=1+1 2=1+1 1 1 1->1+1 6=2+2+1+1

6 3=2+1 3=2+1 1+1 1 1->1+1 9=3+3+2+1

7 4=3+1 4=3+1 2+1 1+1 1->1+1 13=4+4+3+2

8 6=4+2 6=4+2 3+1 2+1 1+1->2+2 19=6+6+4+3

9 9=6+3 9=6+3 4+2 3+1 2+1->3+3 28=9+9+6+4

........

A
.s=A[n-1].s+A[n-1].c;

A
.a=A[n-1].a+A[n-1].c;

A
.b=A[n-1].a;

A
.c=A[n-1].b;

当n>=2时,A
.s=A
.a;

仔细看规律,

横着看发现:s
=2*s[n-3] + s[n-4] + s[n-5]

竖着看发现:s
=s[n-1]+s[n-3]

#include <stdio.h>
int main()
{
int m,n,i,j,tot;
__int64 a[56];

a[1]=1;a[2]=2;a[3]=3,a[4]=4;

for (i=5;i<56;i++)
{
a[i]=a[i-1]+a[i-3];
}

while (scanf("%d",&n)!=EOF)
{
if(n==0)  break;
tot=0;
printf("%I64d\n",a
);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: