ACM递归递推练习 Problem A

来源:互联网 发布:nginx 页面路径 编辑:程序博客网 时间:2024/05/08 14:07

//直接说思路吧,我这个就做的麻烦死了,low爆了,,,
做题的时候一直想着课本上的例子,虫子那个题目,所以也用了两个数组,a是母牛,b是这一年出生呢个的小母牛(课本那个例子是用b代表小母牛的数量),赋上前四年的值,后面每年母牛与小母牛的关系很好找出,第四个年头开始生,说明三年就成母牛了,所以i年的母牛等于i-1年的母牛+i-3年的小母牛,小母牛的数量就简单了,就是i年母牛的数量。输出是注意把小母牛的数量也加上既没问题了。
这个题用递归更是简单我自己试了试,就是当n>5的时候返回i-1和i-3的和,<5就返回他本身n。代码附在下面。
#include <bits/stdc++.h>//母牛的故事using namespace std;int main(){int a[100],b[100],n,i,sum;a[1]=1;b[0]=0;b[1]=0;for(i=2;i<=4;i++) {  a[i]=1;   b[i]=1;}while(cin>>n){if(n==0)break;for(i=5;i<=n;i++){a[i]=a[i-1]+b[i-3];b[i]=a[i];}sum=a[n]+b[n]+b[n-1]+b[n-2];cout<<sum<<endl;}    return 0;}
这个递归的做法我只是自己试了一下,并没有提交,也不是多么确定,但是自己试着的答案是对的。
#include<iostream>
using namespace std;
int f(int n)
{
if(n<=4) return n;
else return f(n-1)+f(n-3);
}
void main()
{
int n;
while(cin>>n)
{
cout<<f(n)<<endl;
}
}

总结一下这个题,就是做题的时候太死板了,想着例题念念不忘,做题应该打开思路

Description

有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?

Input

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

Output

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

Sample Input

2450

Sample Output

246

Hint

 
0 0
原创粉丝点击