标题:牛生牛的问题求解
只看楼主
danlqg
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2021-1-11
结帖率:0
已结贴  问题点数:20 回复次数:3 
牛生牛的问题求解
规则:母牛在3-6周岁为育龄,每年生一头小牛。每生2头牛中有1头是母牛,若当年生的牛数是奇数,则多余的1头为母牛。
公牛和母牛的寿命都是8年,第9年就死了
假定第1年有2头3岁母牛。
输入年份,输出当年存在的公牛、母牛的头数。

已经手工推演前12年母牛和公牛的头数(每组3个数,分别是年份、母牛数、公牛数):
1: 2   0  
2: 3   1  //当年2头育龄母牛生1公1母
3: 4   2
4:5   3
5: 6  4
6: 7  4  //当年2头8岁母牛已过育龄,新增的1头3岁母牛生1小母牛
7: 6  5  //当年2头母牛超过寿命死亡,2头育龄母年生1公1母
8: 8  6
9: 10  8
10:12  10
11:13  11
12:15  12 //当年1公1母2头牛超过寿命死亡,5头育龄母牛生3母2公

困扰多日无解。各位帮忙!

[此贴子已经被作者于2021-1-11 22:20编辑过]

搜索更多相关主题的帖子: 手工 新增 年份 个数 困扰 
2021-01-11 22:17
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:10 
测试了一下你手工推演的数据,是正确的
程序代码:
#include <stdio.h>

int main( void )
{
    unsigned a[9] = { 0 }; // 依次保存着 0到8岁的公牛数目
    unsigned b[9] = { 0 }; // 依次保存着 0到8岁的母牛数目
    b[3] = 2; // 第1年有2头3岁母牛

    puts( "年\t母\t公" );
    for( unsigned year=1; year<=12; ++year )
    {
        unsigned a_count=0, b_count=0;
        for( size_t i=0; i!=9; ++i )
            a_count+=a[i], b_count+=b[i];
        printf( "%u:\t%u\t%u\n", year, b_count, a_count );

        unsigned baby = b[3]+b[4]+b[5]+b[6]; // 母牛在3-6周岁为育龄, 每年生一头小牛
        for( size_t i=8; i!=0; --i )
            a[i]=a[i-1], b[i]=b[i-1];
        a[0]=baby/2, b[0]=(baby+1)/2; // 若当年生的牛数是奇数,则多余的1头为母牛
    }
}


输出
年      母      公
1:      2       0
2:      3       1
3:      4       2
4:      5       3
5:      6       4
6:      7       4
7:      6       5
8:      8       6
9:      10      8
10:     12      10
11:     13      11
12:     15      12
2021-01-12 09:04
danlqg
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2021-1-11
得分:0 
学习了。多谢!
2021-01-12 21:38
huangbo_031
Rank: 2
等 级:论坛游民
威 望:1
帖 子:3
专家分:18
注 册:2021-1-8
得分:10 
第2年出生的母牛在第5年的时候可以下崽了,因此第5年有3头小牛出生,2母1公, 所以第5年母牛公牛的数目应该是 7, 4 手推错了吧
2021-01-13 09:29



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-504611-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.071373 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved