蓝桥杯之母牛的故事-动态规划+归纳版(c++实现)

上文链接:蓝桥杯之景点游览-较优解:交换排序(c++实现)


题目描述

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

输入

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

输出

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

样例输入

2
4
5
0

样例输出

2
4
6

该算法之我的思路

  • 首先查找某年份母牛数和新增母牛数之间的关系,详细参考图片在这里插入图片描述
    根据规律我先计算某年份母牛数新增表,在根据母牛数新增表计算某年份母牛数表
  • 我利用输入年份数时确定年份的最大值,在此基础上仅对上述的新增表和母牛数表生成一次即可完成该算法,这样节省了重复计算的时间。

算法展示

#include <iostream>
using namespace std;
int main()
{
	int n[100],j=0;//定义输入变量:n年数组,n的个数j 
	cin>>n[j];
	
	//输入n年数组并记录年份最大值max 
	int max = n[j];
	while(n[j]){
		j++;
		cin>>n[j];
		if(n[j]>max)max = n[j];
	}
	 
	int years[100],i;//定义某年份对应母牛数表 
	years[0]=years[1]=years[2]=years[3]=1;//初始化某年份对应母牛数表的值 
	//生成某年份对应新增母牛数表 
	for( i = 4;i<max;i++)
	{
		years[i]=years[i-1]+years[i-3];
	}
	//生成某年份对应母牛数表(不是新增母牛数表) 
	for( i =1;i<max;i++)
	{
		years[i]=years[i]+years[i-1];
	}
	
	//根据年份母牛数生成表查找对应年份母牛数并输出 
	for( i = 0;i<j;i++)
	{
		cout<<years[n[i]-1]<<endl;
	}
	return 0;
	
}

下文链接:蓝桥杯之Cylinder-数学知识+归纳(c++实现)

发布了30 篇原创文章 · 获赞 3 · 访问量 2766

猜你喜欢

转载自blog.csdn.net/weixin_44077556/article/details/104233665