我们假设一只成年母牛从第四年开始每年可以生下一只小母牛,并且小母牛生下来后需要三年成长为成年母牛。
具体来说,这个递归函数 Cow(n) 的意义是:在第 n 年,一只母牛可以繁殖多少次。我们首先需要处理边界条件,即当n小于4时,返回1,因为在前3年里,母牛还未开始繁殖,只能算作一只成年母牛。然后,在n>=4的情况下,我们可以将问题拆分为两部分:
1.在第n年,一只成年母牛可以生下一只小母牛,因此在第n年繁殖的数量为Cow(n-1)。
2.在第n年,每只3年大的小母牛都可以成为一只成年母牛,并继续繁殖,因此在第n年繁殖的数量为Cow(n-3)。
综上所述,我们可以将问题分解为子问题并通过递归解决。在主函数中,我们读入一个年数 day,然后调用 Cow(day) 来计算在 day 年内一只母牛可以繁殖的次数,并将结果打印出来
这你自己拿个笔画一画不就出来了么,相当于找规律问题,第一行表示月份,第二行表示牛,然后前三个月只有一头,第四个月,第一头开始生一头,然后低七个月,第一头生的那头也开始生,依次类推
1 2 3 4 5 6 7
1 1 1 2 3 4 7
#include <stdio.h>
void move(int arr[], int sz)
{
int left = 0;
int right = sz - 1;
while (left < right)
{
while ((left < right) && (arr[left] % 2 == 1))
{
left++;
}
while ((left < right) && (arr[right] % 2 == 0))
{
right--;
}
if (left < right)
{
int tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
}
}
}
void print(int arr[], int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
}
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int sz = sizeof(arr) / sizeof(arr[0]);
move(arr, sz);
print(arr, sz);
return 0;
}