码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-09-23 15:03:41      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:main   问题   表达式   nbsp   \n   必须   lib   因此   stdio.h   

课本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\n", 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思考题.五次循环解决百鸡百钱问题

标签:main   问题   表达式   nbsp   \n   必须   lib   因此   stdio.h   

原文地址:https://www.cnblogs.com/nester/p/9692496.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!