解题思路:
本题给我们的思路是通过递归来解决,其实我们可以自己摸索出为什么用递归。
题目中给出的有两个部分,大母牛和小母牛,求出的是两者之和。并且我们能发现小母牛第四年能够成为大母牛且产下小母牛。
于是和解数学规律题一样,列出不同年份母牛的总数,并且细化大小母牛分别的数量。
种类\年份 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
大母牛 | 1 | 1 | 1 | 1 | 2 | 3 | 4 |
小母牛 | 0 | 1 | 2 | 3 | 4 | 6 | 9 |
总数 | 1 | 2 | 3 | 4 | 6 | 9 | 13 |
我是分两部分来看的,一部分是第四年之前,另一部分是之后。很明显,第一部分只用返回对应年份的数值就行了。
重点在第二部分:(从第四年这个零界点开始)
1)4 = 1 +3
2)6 = 2 +4
3)9 = 3 +6
4)13=4 +9
我们可以发现,式子的第一项自然增加,第二项正好等于f(n-1),按如此去看看第一项的规律,可以发现第一项等于f(n-3)
于是f(n)=f(n-1)+f(n-3).
注意事项:
1)在明白了这样的规律如何得出来的,现在就只剩敲码了。
实例时输入一连串数,且由回车分割,输入0则只输出0之前的数字。
这意味着我们需要构建一个数组,先处理输入再处理输出。
2)注意年份小于55,也就是说定义的数组只有54个项
参考代码:
#include <stdio.h>
int DOT(int n)
{
if (n <= 4)
{
return n; //不大于4时直接返回值
}
else
{
return DOT(n - 1) + DOT(n - 3); //用发现的规律直接带入
}
}
int main()
{
int n=0,i=0;
int array[54] = { 0 };
while(i<55)
{
scanf_s("%d", &array[i]); //输入
if (array[i] == 0)break; //为零时结束输入
i++;
}
n = i;
i = 0;
while (i<n)
{
printf("%d\n", DOT(array[i])); //输出
i++;
}
return 0;
}
0.0分
0 人评分
拆分位数 (C++代码)用char简单粗暴,嗯浏览:1122 |
C语言程序设计教程(第三版)课后习题10.3 (C语言代码)浏览:590 |
点我有惊喜!你懂得!浏览:2248 |
C语言程序设计教程(第三版)课后习题9.6 (C语言代码)浏览:596 |
C语言程序设计教程(第三版)课后习题10.2 (C语言代码)浏览:1152 |
2005年春浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:530 |
C语言训练-大、小写问题 (C语言代码)浏览:2421 |
【出圈】 (C语言代码)浏览:590 |
【出圈】 (C语言代码)浏览:824 |
C语言训练-数字母 (C语言代码)浏览:670 |