请选择 进入手机版 | 继续访问电脑版

智少年IT小达人_演武台

 找回密码
 立即注册
查看: 4995|回复: 5

趣味编程:百钱买百鸡

[复制链接]
本站粉丝  发表于 2015-7-2 16:45:01 |阅读模式
        中国古代数学家著有一本古典数学问题的《算经》,其中记载的问题在当时都是一些有趣的难题。其中最著名的“百钱百鸡”问题叙述如下:
    “鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,问翁、母、雏各几何?”
    这个问题翻译成白话文就是:“一只公鸡值五文钱;一只母鸡值三文钱;三只小鸡值一文钱;请问用一百文钱买一百只鸡,公鸡、母鸡和小鸡各有多少只?”
    我们假设公鸡、母鸡和小鸡的个数分别为x,y,z,那么买公鸡的钱数为5x,买母鸡的钱数为3y,买小鸡的钱数为z/3;再由题意,x,y和z的和为100,因此我们可以得到该问题的数学模型如下:
5x+3y+z/3=100
x+y+z=100
    因为鸡的个数只能是整数,所以问题可以归结为求这个不定方程的整数解。
    不定方程的求解途径一般是打出各变量的数值汇聚围,再用穷举法找到所有可能的解,
    在本题中,如果100文钱全部买公鸡,最多买20只,因此x的取值在0~20之间;同理y的取值在0~33之间。得到了变量x和y的取值汇聚围后,昝用C语言的二重for循环,让x和y 分别作为外层和内层循环的循环变量,我们可以让计算机穷举所有可能的情况,从而找到正确的解。    代码如下:
#include<stdio.h>
main()
{   int x,y,z,j=0;
    printf("ossible solutions to buy 100 fowls whith 100 yuan\n");
    for(x=0;x<=20;x++)     /*公鸡的数目作为外层循环的循环变量*/
        for(y=0;y<=33;y++) /*母鸡的数目作为内层循环的循环变量*/
        {   z=100-x-y;     /*用总鸡数方程计算小鸡的数目*/
            if(z%3==0 && 5*x+3*y+z/3==100)  /*如果满足总钱数,找到合理的解*/
                printf("2d:cock=%-2d hen=%-2d chicken=%-2d\n",++j,x,y,z);
        }
}
运行结果:
1:cock=0   hen=25  chicken=75
2:cock=4   hen=18  chicken=78
3:cock=8   hen=11  chicken=81
4:cock=12  hen=4   chicken=84

回复

使用道具

发表于 2015-11-10 23:50:10 | 显示全部楼层
with picture
chick.jpg
回复 支持 反对

使用道具 举报

发表于 2018-7-23 10:36:00 | 显示全部楼层
with picture
chick.png
cock.png
回复 支持 反对

使用道具 举报

发表于 2018-7-23 10:37:04 | 显示全部楼层
百钱买百鸡 图片
hen.jpg
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|智少年 ( 粤ICP备15046784号

GMT+8, 2022-10-1 08:44 , Processed in 0.129698 second(s), 21 queries .

© 2015-2018 深圳智少年教育咨询有限公司

快速回复 返回顶部 返回列表