正文

[006] 百鸡问题2006-02-15 14:28:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/wentao/10067.html

分享到:

    张丘建《算经》中提出“百鸡问题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、母、雏各几何?

分析:公鸡-cocks ,母鸡-hens,小鸡-chicks   
            cocks+hens+chicks=100
            5*cocks+3*hens+chicks/3=100

关键:  受百钱买百鸡的约束有 0≤cocks≤19, 0≤hens≤33, 0≤chicks≤100
思路:  累试法(枚举法)  依次取cocks值域中的值,然后求其余两数,看是否满足题意

算法描述:
cocks=0
    当cocks≤19时
    {
          找满足题意的hens,chicks数
          cocks加1
    }
细化:
cocks=0
    当cocks≤19时
    {
        hens=0
        当hens≤33时
        {
            找满足题意的chicks数
            hens加1
        }
        cocks加1
    }
再细化:
cocks=0
    当cocks≤19时
    {
        hens=0
        当hens≤33时
        {
            chicks=100-cocks-hens
            如果 (5*cocks+3*hens+chicks/3=100) 则输出
            hens加1
        }
        cocks加1
    }

编写代码如下:


#include "stdio.h"
void main()
{
    int cocks, hens, chicks;
    printf ("cocks  hens  chicks\n");
    printf ("-------------------\n");

    cocks=0;
    while (cocks <= 19)
    {
        hens=0;
        while (hens <= 33)
        {
            chicks = 100 - cocks - hens;
            if ( cocks * 5 + hens * 3 + chicks / 3 == 100 )
                printf ("%5d %5d %5d\n", cocks, hens, chicks);
            hens++;
        }
        cocks++;
    }
    printf ("-------------------\n");
}

运行结果:
===========================
cocks  hens  chicks
-------------------
    0    25    75
    3    20    77
    4    18    78
    7    13    80
    8    11    81
   11     6    83
   12     4    84
-------------------
===========================

######################################更正########################################

经热心人评论指点, 做如下改正:
小鸡数必须为3的倍数:
算法描述:
cocks=0
    当cocks≤19时
    {
        hens=0
        当hens≤33时
        {
            chicks=100-cocks-hens
            如果 (5*cocks+3*hens+chicks/3=100 且 小鸡数为3的倍数) 则输出
            hens加1
        }
        cocks加1
    }

代码:
#include "stdio.h"
void main()
{
    int cocks, hens, chicks;
    printf ("cocks  hens  chicks\n");
    printf ("-------------------\n");

    cocks=0;
    while (cocks <= 19)
    {
        hens=0;
        while (hens <= 33)
        {
            chicks = 100 - cocks - hens;
            if ( cocks * 5 + hens * 3 + chicks / 3 == 100 && chicks % 3 == 0)
                printf ("%5d %5d %5d\n", cocks, hens, chicks);
            hens++;
        }
        cocks++;
    }
    printf ("-------------------\n");
}

运行结果:
===========================
cocks  hens  chicks
-------------------
    0    25    75
    4    18    78
    8    11    81
   12     4    84
-------------------
===========================



阅读(5366) | 评论(18)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册