int CalCowsNum(int Year){
int iCnt=0;
}
long lCowsNum= 1;
for(iCnt=1; iCnt<=iYear; iCnt++){
if(iCnt>=4){
if((iYear-iCnt)>3){
lCowsNum += CalCowsNum(iYear - iCnt);
else{
lCowsNum++;
}
}
}
}
return lCowsNum;
}
int main(){
int iYear =0;
scanf ("%d", &iYear);
prinf("In' %d years, There is %d cows.n" ,iYear, CalCowsNum(iYear):
return o;
}
输入20
思路:
年 奶牛数量
0 1
1 1
2 1
3 1
4 2
5 3
6 4
7 5
8 7
9 10
10 14
11 19
12 26
13 -36
14-50
15-69
16-95
17-131
18-181
19-250
20-345
寻找规律发现:当年数量是一年前的数量加上四年前的数量,
即:
0,1,2,3奶牛数量为分f(n)=1;
年数大于4时f(n)=f(n-1)+f(n-4);
所以可以用函数递归计算某一年的奶牛数量
把题目要求描述一下,才知道代码问题在哪里。
第三行单独的大括号不应该有吧,这不就直接函数结束了么
int CalCowsNum(int Year){
int iCnt=0;
}
#include <iostream>
using namespace std;
int cowssum(int birth)
{
int count = 0;
for(int i = birth + 4; i <= 20; i++)
count += cowssum(i);
return count + 1;
}
int main()
{
int b = cowssum(0);
cout << b << endl;
return 0;
}
这个代码更简单一点,一共是345只。
考研笔试题目,重点在于怎么结果分析出来,用的是什么算法,答案 为20年345头牛 !345怎么算出来的!!!
递归函数啊,这个就是一头牛每个年生一只小牛,小牛需要4年之后才能每年生一只小牛,问你20年之后共多少牛,直接运行一下结果就出来了啊
In' 20 years, There is 380 cows.n