百钱百鸡问题C语言练习(二种算法) 您所在的位置:网站首页 百鸡百钱问题算法C语言 百钱百鸡问题C语言练习(二种算法)

百钱百鸡问题C语言练习(二种算法)

2024-07-01 11:38| 来源: 网络整理| 查看: 265

我国古代数学家张丘建在《算经》一书中曾提出过著名的“百钱买百鸡”问题,该问题叙述如下:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,则翁、母、雏各几何?

翻译过来,意思是公鸡一个五块钱,母鸡一个三块钱,小鸡三个一块钱,现在要用一百块钱买一百只鸡,问公鸡、母鸡、小鸡各多少只?

这个题目经常拿来做c语言的练习,是一道锻炼学生的题目,首先要分析题目并得出算法,然后根据算法编程。 编程并不是很复杂的问题,本文提供二种算法,请大家比较优劣(大家可以把100变成1000、100000… 进行测试)。

一、先写出方程,然后对方程的用一个变量表示,对该变量进行循环,循环次数为100/5=20。 其优点是对鸡的总数和钱的总数都可以定义,也可以变成千钱千鸡问题,而且只有一个循环。

/* 百钱百鸡问题及扩展 5x+3y+z/3=100 x+y+z = 100 */ #include #include #include int main() { int a,b; printf("输入钱总数和鸡总数:\n"); scanf("%d,%d",&a,&b); subx(a,b); return 0; } /* 5x+3y+z/3=a x+y+z=b then: 5x=0,y>=0,z>=0 y=(3a-b-14x)/8 z=3(a-5x-3y) x+y+z=b */ int subx(int a,int b) { int x,y,z; for(x=1;x=0 &&y>=0 && z>=0) printf("公鸡=%d,母鸡=%d,小鸡=%d\n",x,y,z); } return 0; }

二、直接使用穷举法的方式来解题, 优点,思路很简单,不需要再算法上多花时间,但扩展性较差,需要三个循环,对于百钱百鸡问题,不存在障碍, 需要 101^3 次猜解,这对于计算机来说是小 CASE!如果扩展出去,循环量增加将导致计算量大幅度上升。 (参见 http://c.biancheng.net/view/500.html )

代码清单:

/* 设公鸡 x 只,母鸡 y 只,小鸡 z 只,得到以下方程式组: A:5x+3y+1/3z = 100 B:x+y+z = 100 C:0


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有