题目来源:http://www.programfan.com/acm/show.asp?qid=7#comment
http://acm.tongji.edu.cn/showproblem.php?problem_id=1005
母牛生小牛
Problem
设有一头小母牛,从出生第四年起每年生一头小母牛,按此规律,第N年时有几头母牛?
Input
本题有多组数据。每组数据只有一个整数N,独占一行。(1≤N≤50)
Output
对每组数据,输出一个整数(独占一行)表示第N年时母牛的数量
Sample Input
1
4
5
20
Sample Output
1
2
3
872
设有一头小母牛,从出生第四年起每年生一头小母牛,按此规律,第N年时有几头母牛?
Input
本题有多组数据。每组数据只有一个整数N,独占一行。(1≤N≤50)
Output
对每组数据,输出一个整数(独占一行)表示第N年时母牛的数量
Sample Input
1
4
5
20
Sample Output
1
2
3
872
核心算法:// func(year-3) 是老母牛1头 因为前三年只有1头母牛 func(year-1)第二代牛数量没1年产1头
return (func(year-3)+func(year-1));
return (func(year-3)+func(year-1));
解题思路:
//第一代永远都是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;
}