题目来源:http://www.programfan.com/acm/show.asp?qid=7#comment
http://acm.tongji.edu.cn/showproblem.php?problem_id=1005
解题思路:
//第一代永远都是1个
//第二代从第4年开始,每年加一个
//第三代从第7年开始,由上一代个数决定 每个产一个
//第四代从第10年开始 由上一代个数决定 每个产一个
//问题的实质是:从新牛出生起就开始了同一个问题 原问题的第1年就是新牛出生的那一年
代码如下:
#include "stdafx.h" #include<iostream> #include<fstream> using namespace std; int a[100]={0,1}; //a[i]村第i代的数量 a[0]总数量 //问题的实质是:从新牛出生起就开始了同一个问题 原问题的第1年就是新牛出生的那一年 int func(int year) { if(year<4) //只有1头牛时 头三年只有原本的母牛1头 { return 1; } else { // func(year-3) 是老母牛1头 因为前三年只有1头母牛 func(year-1)第二代牛数量没1年产1头 return (func(year-3)+func(year-1)); } } int main(int argc, char* argv[]) { ifstream in("a.txt"); int n; while(in>>n) { cout<< func(n)<<endl; } return 0; }