百鸡百钱,在经典里总能口味出不一样的美

本文探讨了经典的百鸡百钱问题,通过简化循环和合理使用条件判断来提高计算效率。文章详细解释了如何利用已知条件减少不必要的计算,并特别讨论了如何处理小鸡数量与价格之间的关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天随手拿到一本书,看到一些趣味的问题,第一个便是百鸡百钱问题:一只公鸡五钱,一只母鸡三钱,三只小鸡一钱。现用百钱买百鸡,请问公鸡,母鸡,小鸡各多少只?

看到这个问题,第一个想到的就是穷举循环法,即用三个循环来写遍历三种鸡,判断 鸡一百鸡且钱花一百则输出各种鸡的数量。
但是三个循环的时间成本太高,可以用组合的方法,即公鸡和母鸡的数量知道了,小鸡的数量就等于100 - gongji - muji,这样执行次数就降了100次,大量节约了时间成本,虽然在这个小程序中影响不是很大,但要是数据量大了,这是一个很可观的节省。

还有一个小细节难住了我,三只小鸡值一钱该怎么表示呢?是应该用浮点数吗?

若小鸡不能被3整除,即小鸡的个数不是3的倍数,钱当然也不能为0整数,即钱数达不到整数100,在判断的时候
if( gongji + muji + xiaoji == 100 && gongji*5 + muji*3 + xiaoji / 3.0 == 100)
若不用浮点数计算,会把一些不能整除的数的结果看成能整除的,导致输出了不符合的结果

    int gongji;
    int muji;
    int xiaoji;
    for( gongji = 0; gongji < 20; gongji++)
    {
        for(muji = 0; muji < 33; muji++)
        {
            xiaoji = 100 - gongji - muji;
            //小鸡个数除以3的问题:若小鸡不能被3整除,则达不到整数100,若不用浮点数计算,会把一些不能整除的数的结果看成能整除的,导致输出了不符合的结果
            if( gongji + muji + xiaoji == 100  &&  gongji*5 + muji*3 + xiaoji / 3.0 == 100)
                    printf("公鸡:%d,母鸡:%d,小鸡:%d\n",gongji,muji,xiaoji);   
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值