话不多说,先来看问题

【百钱百鸡】

中国数学家张邱建(公元五世纪,其它资料不详)在他的《算经》中提出了著名的“百钱买百鸡”问题:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一。百钱买百鸡,问翁、母、雏各几何?

你的任务:输出所有可行的方案。

输入格式

输出格式

输出共有若干行:

每行三个整数,相互之间用1个空格隔开,依次为公鸡、母鸡、小鸡的数量。

所有方案,第一优先级按公鸡的数量从小到大排列。

问题分析——

把公鸡、母鸡和小鸡的数量分别设为cock,hen,chicken,百钱百鸡问题就可以转换成解不定方程组的问题。

因此 ,百钱百鸡问题可以根据三层循环的嵌套来实现:第一层控制公鸡的数量,第二层控制母鸡的数量,第三层控制小鸡的数量。

1.根据等式cock+hen+chiken = 100,推出3个循环的可控范围:

公鸡:0~100只

母鸡:0~100只

小鸡:0~100只

三重循环枚举101*101*101 = 1030301次

你以为这就完了?,NO! 这样三重循环有可能会超时!

我们还需要进一步优化

2.根据等式5*cock+3*hen+chicken/3 = 100

公鸡:0~20只

母鸡:0~34只

小鸡:0~100只(虽然百钱可以买三百只,但是题目要求只能买100只)

三重循环须要枚举21*34*101 = 72114次

还可以优化一下(^_−)☆

3.进一步分析得到,小鸡的数量是三的整数倍,否则不可能刚好花一百块钱。因此,小鸡只需按照三的倍数枚举,即:for(chicken = 0  ; chicken<=99 ; chicken+=3),仅仅34次。

如此,三重循环要循环21*34*34 = 24276次

4.进一步优化,当公鸡,母鸡的数量确定了之后,小鸡的数量就固定为100-cock-hen,无需进行枚举了。如此,三重循环变二重循环,只需要尝试枚举21*34 = 714次

程序示例

#include<bits/stdc++.h>
using namespace std;
int main(){for(int cock = 0 ; cock<21 ; cock++){for(int hen = 0 ; hen <34 ; hen++){int chicken = 100-cock-hen; if(cock*15+hen*9+chicken == 300)//通分 cout<<cock<<" "<<hen<<" "<<chicken<<"\n";}}return 0;
}

经典枚举——百钱百鸡问题相关推荐

  1. 算法之枚举及其优化(1)——百钱百鸡问题的多种解法(一重循环解决)

    目录 写在前面: 从百钱百鸡问题说起 直接枚举(暴力破解) 开始优化(缩小枚举范围) 继续优化(二重循环) 最终优化(一重循环) 总结 写在后面 写在前面: 本文适合初学者学习,鉴于本人能力有限以及希 ...

  2. 算法思想(枚举)——百钱百鸡+生理周期+完美立方+熄灯问题+讨厌的青蛙

    枚举的思想其实时日常生活中提取的一种智慧 ^------^ 枚举的思想在生活中有着非常广泛的应用        在对事物进行归纳推理时,会逐一考察某个事物的所有可能的情况,并且逐一进行检验,这就是枚举 ...

  3. 百钱百鸡php穷举法,PHP经典题:百钱百鸡问题(穷举算法)

    PHP经典题:百钱百鸡问题(穷举算法) 百钱百鸡问题: 已知:公鸡5元一只,母鸡3元一只,小鸡一元3只 现用100元钱买了100只鸡,问:公鸡母鸡小鸡各几只? --请考虑尽可能高效的方法 思路: 如果 ...

  4. 百钱百鸡问题(C++枚举法)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 题目: 中国古代数学家张丘建在他的<算经>中提出了著名的"百钱百鸡问题":鸡翁一,值钱五:鸡母一,值钱 ...

  5. html中js计算百钱百鸡,JS经典案例之百钱百鸡

    今天我们来回顾一下JS的经典案例之百钱百鸡 题目 公鸡5元钱一只,母鸡3元钱一只,小鸡3只一元钱,用100元钱买一百只鸡,其中公鸡,母鸡,小鸡都必须要有,问公鸡,母鸡,小鸡要买多少只刚好凑足100元钱 ...

  6. C/C++经典例题:百钱百鸡

    c++程序[百钱买百鸡]的解法 题型介绍: 百鸡问题是一个数学问题, 出自中国古代约5-6世纪成书的<张邱建算经>, 是原书卷下第38题, 也是全书的最后一题, 该问题导致三元不定方程组, ...

  7. C语言 古代经典算术题:百钱百鸡。用100元钱买100只鸡,已知公鸡每只5元,母鸡每只3元,小鸡一元3只,求出所有的卖法。

    C语言 古代经典算术题:百钱百鸡.用100元钱买100只鸡,已知公鸡每只5元,母鸡每只3元,小鸡一元3只,求出所有的卖法. 代码: #include <stdio.h> void main ...

  8. java逻辑循环经典案例(不死神兔、百钱百鸡、逢七过、评委打分、数组翻转)

    1减肥计划: 星期一:跑步: 星期二:游泳; 星期三:慢走; 星期四:动感单车 星期五:拳击 ;星期六:爬山; 星期日:好好吃一顿. import java.util.Scanner; /*减肥计划: ...

  9. 儿时数学课上的“百钱百鸡”问题我又捡起来了

    一 背景介绍 奶奶给了小花100大洋,让她去集市买鸡. 买鸡要求是:既要有公鸡(cock),也要有母鸡(hen),还要有小鸡(chick).三种鸡缺一不可,不然回家打屁屁. 市场的行情价是:公鸡5块大 ...

  10. java - 百钱百鸡小算法

    传送门: 袁咩咩的小小博客 百钱百鸡是一个非常经典的不定方程问题,最早源于我国古代的<算经>,这是古代著名数学家张丘建首次提出的.百钱百鸡问题原文如下: 鸡翁一,值钱五,鸡母一,值钱三,鸡 ...

最新文章

  1. 在当当买了python怎么下载源代码-爬虫实战:爬取当当网所有 Python 书籍
  2. 4-1 复数类的运算符重载
  3. [Apache]网站页面静态化与Apache调优(图)
  4. Altium Designer 资料整理
  5. html编写edm时要注意的事
  6. 有没有什么好的C++视频教程?
  7. 亚马逊EC2构建代理服务器心血历程
  8. RequestMapping manager问题
  9. FileZilla客户端使用遇到的问题
  10. ubuntu下sopcast安装的一点笔记
  11. linux 更新包缓存目录,清除ubuntu下缓存、软件安装包和多余内核
  12. Mbps、Kbps、KBps的关系
  13. linux 目录权限上下文,谢烟客---------Linux之文件安全上下文及特殊权限位
  14. 提示计算机中丢失 opencv_world300d.dll
  15. ubantu14.04 微信wechat安装
  16. vi 查看最顶部_vi命令示例大全
  17. VMware vsphere和VMware vsphere Hypervisor有什么不同
  18. 入耳式蓝牙耳机哪个牌子好用?四款高品质音乐游戏耳机
  19. ac远程web管理 r470gp tl_折腾家庭局域网,TP-LINK R470AC1200 晒单
  20. 手绘草图生成逼真的人脸

热门文章

  1. RocketMQ ConsumeQueue 消费队列文件
  2. android 微信地图定位失败,微信端H5使用百度地图定位获取当前位置安卓定位不准...
  3. 微服务架构学习与思考(03):微服务总体架构图解
  4. Android安装应用后点击打开(Open)带来的问题及解决方式
  5. android带投屏播放器,投屏播放器app下载
  6. 利用python、selenium和超级鹰 实现B站自动登录
  7. addr2line的使用
  8. 超链接的其他用法,复合选择器
  9. IDE之VS:Visual Studio的简介(包括 VS2013、VS2015、VS2017、VS2019)、安装、入门、使用方法之详细攻略
  10. smt贴片加工贴片机开机和贴片编程