题目描述
有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?输入格式
输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。n=0表示输入数据的结束,不做处理。
输出格式
对于每个测试实例,输出在第n年的时候母牛的数量。
每个输出占一行。
样例输入
2 4 5 0
样例输出
2 4 6这道题的关键之处是要找出关系 : year[n] = year[n-3] + year[n-1] ; 即三年前的牛在今年能生出新的小牛,再加上原本就有的牛,就是今年的牛的数量. 递归法
#include <iostream> using namespace std; int count(int n){ if(n <= 4) return n;//前4年牛的数量是与年份相等的 return count(n-3)+count(n-1); } int main(){ int n;cin >> n; while(n != 0){ cout << count(n) << endl; cin >> n; } }
当 n 比较大时,递归层数就很深,输入的 n 比较多时,就会产生大量的重复运算,所以可以使用数组存储已计算的数据
递推法
#include <iostream> using namespace std; #include <vector> vector<int> year; void count(int n,int &max){ if(max >= n) { cout << year[n] << endl; return; } while(max < n){ year.push_back(year[max-2] + year[max]); max++; } cout << year[n] << endl; } int main(){ int n,max; max = 4;//max表示当前最多算到第max年的数据 year.push_back(-1);//无特别意义,只是为了让year[n]表示第n年的数量 for(int i = 1;i <= 4;i++) year.push_back(i); cin >> n; while(n != 0){ count(n,max); cin >> n; } }
标签:include,递归,int,max,C语言,year,1004,母牛 From: https://www.cnblogs.com/uacs2024/p/18539971