一重循环解决百鸡百钱问题

课本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的范围:c>=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

五次循环结束问题.

转载于:https://www.cnblogs.com/nester/p/9692496.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值