百钱百鸡问题

问题描述

中国古代数学家张丘在他的《算经》中提出了一个著名的"百钱百鸡问题":一只公鸡值5钱,一只母鸡值3钱,三只小鸡值1钱,现在要用百钱买百鸡,请问公鸡、母鸡、小鸡各多少只?

问题分析

分别假设公鸡、母鸡、小鸡的数量为cock、hen、chicken,初始值为0,如果100钱全部买成公鸡,最多20只,全部买成母鸡最多33只,全部买成小鸡最多300只,由此确定三个变量的取值范围。可以采用三层for循环实现,当满足cock+hen+chicken=100且花费的钱正好100时满足要求。(注意:C语言中两个整数相除得到的结果仍为整数,“/”两边有一个数为float型得到的结果即为float型)

代码

#include <stdio.h>
int main(){int cock,hen,chicken;for(cock=0;cock<=20;cock++)  //外层循环控制公鸡数量取值范围0-20for(hen=0;hen<=33;hen++) //内层循环控制母鸡的数量取值范围0-33 for(chicken=0;chicken<=100;chicken++){ // 内层循环控制小鸡数量取值范围0-100 if((cock+hen+chicken == 100) && (5*cock + 3*hen + chicken/3.0==100))printf("cock=%d,hen=%d,chicken=%d\n",cock,hen,chicken);}
} 

输出示例

代码分析

上述算法需要穷举21*34*101=72114次,效率太低。对于这类求解不定方程的问题,各层循环的控制变量直接与方程的未知数相关,且采用对未知数的取值范围穷举和组合的方法可以得到全部的解。对于本题,当公鸡的数量确定后,小鸡的数量就固定为100-cock-chicken,无须再进行穷举了,此时约束条件只有一个:5*cock+3*hen+chicken/3.0=100,这样我们利用两重循环即可实现。

改进后的代码如下:

#include <stdio.h>
int main() {int cock,hen,chicken;for(cock=0; cock<=20; cock++) //外层循环控制公鸡数量取值范围0-20for(hen=0; hen<=33; hen++) { //内层循环控制母鸡的数量取值范围0-33chicken=100-cock-hen;if(5*cock + 3*hen + chicken/3.0==100)//验证解的合理性printf("cock=%d,hen=%d,chicken=%d\n",cock,hen,chicken);}
}

改进后的代码只需要尝试21*34=714次,进一步提高了算法的效率。

C语言编程-百钱百鸡问题相关推荐

  1. #Java编程题-百钱百鸡

    问题: 百钱百鸡问题.用100钱买100只鸡,公鸡一只五钱,母鸡一只三钱,雏鸡三只一钱,编程计算共有几种买法(要求每种鸡至少要买1只). 自己的实现,没有什么数据结构,算法,求大神指点!! packa ...

  2. C语言·百钱百鸡问题

    百钱百鸡问题 用100元钱卖100只鸡,公鸡每只5元,母鸡每只3元,小鸡每3只1元,要求每种鸡至少买一只.试编程求各种鸡各买多少只 主要思路:先将三种鸡的个数设出来,利用多层循环满足鸡个数和为100, ...

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

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

  4. C语言实现 百钱百鸡

    百钱百鸡 1.案例描述 中国古代数学家张丘建在它的<算经>中提出了一个著名的"百钱百鸡问题":一只公鸡值五钱,一只母鸡值三钱,三只小鸡值一钱,现在要用百钱买百鸡,请问公 ...

  5. C语言>>百钱百鸡问题。鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,翁、母、雏各几何 ?

    使用工具: Dev-c++ 5.11 解题思路: 解读标题<百钱百鸡>,意思就是用一百元钱,购买一百只鸡,因为鸡的类别有三种,所以就有 不同的方案.公鸡一只五元钱,最多20只:母鸡一只三元 ...

  6. Python编程练习:百钱百鸡问题

    # coding:utf-8 """ 百钱百鸡问题 百钱百鸡是我国古代数学家张丘建在<算经>一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一.百 ...

  7. 公鸡5钱一只 母鸡3钱一只c语言,C# “百钱百鸡 公鸡5元一只,母鸡3元一只,小鸡一元3只,用100元买100只鸡一种做法...

    #region 百钱百鸡 Console.Write("公鸡5元一只,母鸡3元一只,小鸡一元3只,用100元买100只鸡"); Console.WriteLine("\n ...

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

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

  9. Python基础-“百钱百鸡”入门逻辑题(刚开始的建议藏起来)

    一:前言 最近这段时间辣条哥发现学Python的人是越来越多,但是适不适合学Python又有几个人知道呢?说到底编程其实很多时候需要的是较强的思维逻辑能力,如果基础的思维逻辑能力不行的话那辣条就得好好 ...

最新文章

  1. CRM WebClient UI里product search上下文节点渲染逻辑
  2. 编写分段函数子函数_编写自己的函数
  3. es管理kabina_小白学ES 05 - 通过Kibana管理集群服务
  4. 【LeetCode笔记】300. 最长递增子序列(Java、动态规划、二分法、贪心)
  5. WebAPI性能监控-MiniProfiler与Swagger集成
  6. idea项目乱码问题
  7. AI “闯入”北极圈
  8. Struts中ActionActionForm
  9. Qt之Threads和QObjects
  10. 利用VBB仿真——实现数码管色子
  11. 六子棋 c语言程序设计,六子棋计算机博弈系统的研究与实现
  12. tomato 无线打印服务器,转一篇关于Tomato无线设置的文章
  13. 从Simulink到PX4——Simulink-PX4插件安装与环境搭建
  14. Java线程(五):Executors、ThreadFactory
  15. 怎么合并多个PDF文件?仅需三个步骤,轻松合成一个文档
  16. TCP/IP 基本C/S模型
  17. 历史上的今天:苹果电脑之父诞生;阿里巴巴收购雅虎中国;OpenAI 击败电竞世界冠军...
  18. 深度解读阿里巴巴云原生镜像分发系统 Dragonfly
  19. CH579实现一个最小外围设备(Peripheral)
  20. EasyPlayerPro RTMP播放器助力远程娃娃机直播抓娃娃技术方案

热门文章

  1. 苹果xr截屏怎么截_原来苹果手机可实现长截屏!学到了,以后不用羡慕别人手机了...
  2. 工业元宇宙 三人行系列直播 12场规划
  3. Visual Studio 2017 安装及使用(新手)
  4. python人工智能入门书籍推荐-了解、学习人工智能必看的十本书
  5. 个性化智能推荐技术研究总结
  6. 登录mysql时遇到了:mysql: [Warning] Using a password on the command line interface can be insecure.
  7. Android常用五大平台上架详解
  8. 【深度学习】深度学习模型
  9. 编写选股公式、同花顺选股公式编写、编写涨停三阴线超短选股指标公式、编写选股公式...
  10. 2010互联网第一件大事件——谷歌退出中国内地