C语言解决百钱买百鸡问题
我国古代数学家张丘建在他的《算经》中提出了一个著名的“百钱买百鸡问题”,鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?
C语言实现过程:
第一种
(1) 使用 for 语句对 3 种鸡的数先在事先确定好的范围内进行穷举并判断,对满足条件的 3 种鸡的数量按指定格式输出,否则进行下次循环。
(2) 程序代码如下:
#include <stdio.h>
int main()
{
int cock,hen,chick; /*定义变童为基本整型*/
for(cock=0;cock<=20;cock++) /*公鸡范围在 0~20 之间*/
for(hen=0;hen<=33;hen++) /*母鸡范围在 0~33 之间*/
for(chick=3;chick<=99;chick++) /*小鸡范围在 3~99 之间*/
if(5*cock+3*hen+chick/3==100) /*判断钱数是否等于 100*/
if(cock+hen+chick==100) /*判断购买的鸡数是否等于 100*/
if(chick%3==0) /*判断小鸡数是否能被 3 整除*/
printf("公鸡:%d,母鸡:%d,小鸡:%d\n",cock,hen,chick);
return 0;
}
运行结果:
公鸡:0,母鸡:25,小鸡:75
公鸡:4,母鸡:18,小鸡:78
公鸡:8,母鸡:11,小鸡:81
公鸡:12,母鸡:4,小鸡:84
技术要点:
根据题意设公鸡、母鸡和雏鸡分别为 cock、hen 和 chick,如果 100 元全买公鸡,那么最多能买 20 只,所以 cock 的范围是大于等于 0 且小于等于 20;如果全买母鸡,那么最多能买 33 只,所以 hen 的范围是大于等于 0 且小于等于 33;如果 100 元钱全买小鸡,那么最多能买 99 只(根据题意小鸡的数量应小于 100 且是 3 的倍数)。
在确定了各种鸡的范围后进行穷举并判断,判断的条件有以下 3 点:
(1) 所买的 3 种鸡的钱数总和为 100。
(2) 所买的 3 种鸡的数量之和为 100。
(3) 所买的小鸡数必须是 3 的倍数。
二、抽象为数学模型
设鸡翁 鸡母 鸡雏数量分别为x y z,则:
x+y+y=100
5x+3y+(1/3)z=100
解答示范
采用穷举法解决:
>#include<stdio.h>
int main(){
int x, y, z;
for(x=0; x<100; x++){
for(y=0; y<100; y++){
for(z=0; z<100; z++){
if(x+y+z==100 && 5*x+3*y+z/3==100){
printf("鸡翁%d只,鸡母%d只,鸡稚%d只。\n", x, y, z);
}
}
}
}
return 0;
}
运行结果
linuxidc@linuxidc:~/linuxidc.com$ ./linuxidc.com
鸡翁0只,鸡母25只,鸡稚75只。
鸡翁3只,鸡母20只,鸡稚77只。
鸡翁4只,鸡母18只,鸡稚78只。
鸡翁7只,鸡母13只,鸡稚80只。
鸡翁8只,鸡母11只,鸡稚81只。
鸡翁11只,鸡母6只,鸡稚83只。
鸡翁12只,鸡母4只,鸡稚84只。
- 用单链表解决约瑟夫问题 C语言实现
- C语言解决现实生活的问题1——判断比赛名次
- C语言金币阵列问题解决方法
- 李洋疯狂C语言之用递归解决李白喝酒问题(附填空题解法)
- C语言解决是谁打碎花瓶的问题
- C语言菜鸟在使用KEIL4.7碰到的问题,无意中解决
- 解决C语言自加的问题:(a++)*(++a)*(a++)*(++a);
- C语言移位操作遇到的问题和解决办法
- c语言dfs解决全排列问题
- 用链栈解决正整数进制转换问题(C语言)
- <C语言>用递归调用函数解决穷举n位二进制数问题
- 【C语言编程】编写一个程序解决选择问题,令k=n/2
- 用C求解一元二次方程的解,遇到的问题及解决办法 分类: C语言 2012-03-13 00:26 3094人阅读 评论(0) 收藏
- C语言解决常胜将军问题代码解析
- C语言解决六数码问题,求解最少变换次数
- 彻底解决Visual Studio 2010/2008编写C语言的问题
- 基础学习——C语言递归解决分鱼问题
- 递归思路解决的四则运算问题,C语言
- Unix编程(二)C语言利用PV原句解决5个经典的进程同步问题
- C语言单向循环链表解决约瑟夫问题