P63思考题.五次循环解决百鸡百钱问题

Posted nester

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P63思考题.五次循环解决百鸡百钱问题相关的知识,希望对你有一定的参考价值。

课本P61页介绍了穷举法,并结合案例3.7解决了百鸡百钱问题.

题目:公鸡5钱1只;母鸡3钱1只;雏鸡1钱3只.百钱买百鸡,求各几只.

书上给出了一种简化算法:

设chick = 100 - hen - rooster 代替判定条件 rooster + hen + chick = 100,

因此只需二重循环即可解决问题.

而这个问题,经过思考之后,可以由一重循环求解.

 

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int rooster, hen, chick;
    int count;
    count = 0;

    //设公鸡r只,母鸡h只,雏鸡c只
    //由计算可得,r = (4 * c - 300) / 3
    //但是必须使等式有意义,即r>=0,即可求解出r的范围:r>=75
    //此外,因为1钱可买3雏鸡,雏鸡的数量c必须是3的整数倍*
    //经检验,75是>=75且能被三整除的最小整数
    //由*可知,雏鸡增加的数量也必须为3的整数倍,所以变量c每次加3

    for(chick = 75; chick <= 300; chick = chick + 3) //这条语句限定了chick的范围 75~300
    {
        count++;
        if ((4 * chick - 300) % 3 == 0)//rooster表达式递增且大于0,但要保证为整数
        {
            rooster = (4 * chick - 300) / 3;
            hen = (600 - 7 * chick) / 3;//这里无需检验hen是否为整数,因为hen=100-r-c,且前面保证了r,c为整数
            if (hen >= 0)//因为hen的表达式递减,这条语句限定了hen的范围>0
                printf("Rooster: %d, Hen: %d, Chick: %d
", rooster, hen, chick);
            else break;
        }

    }
    printf("Total count: %d", count);
    return 0;
}

输出如下:

Rooster: 0, Hen: 25, Chick: 75
Rooster: 4, Hen: 18, Chick: 78
Rooster: 8, Hen: 11, Chick: 81
Rooster: 12, Hen: 4, Chick: 84
Total count: 5

五次循环结束问题.





以上是关于P63思考题.五次循环解决百鸡百钱问题的主要内容,如果未能解决你的问题,请参考以下文章

百鸡百钱

百鸡百钱

百鸡百钱修改

百钱百鸡的python算法

Java实现百钱买百鸡

百鸡白钱