设为首页 加入收藏

TOP

C语言百钱百鸡问题代码及解析
2018-12-11 14:10:45 】 浏览:90
Tags:语言 钱百鸡 问题 代码 解析

问题描述


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


问题分析


如果用百钱只买公鸡,最多可以买20只,但题目要求买一百只,所以公鸡数量在0~20之间。同理,母鸡数量在0~33之间。在此把公鸡、母鸡和小鸡的数量分别设为cock、hen、chicken,则 cock+hen+chicken=100,因此百钱买百鸡问题就转换成解不定方程组的问题了:



算法设计


对于不定方程组,我们可以利用穷举循环的方法来解决,也就是通过对未知数可变范围的穷举验证方程在什么情况下成立,从而得到相应的解。公鸡范围是0~20,可用语句for(cock=0; cock<=20; cock++)实现。钱的数量是固定的,要买的鸡的数量也是固定的,母鸡数量是受到公鸡数量限制的,同理,小鸡数量受到公鸡和母鸡数量的限制,因此可以利用三层循环的嵌套来解决:第一层循环控制公鸡数量,第二层控制母鸡数量,最里层控制小鸡数量。即:


for(cock=0; cock<=20; cock++)  //外层循环控制公鸡数量范围
    for(hen=0; hen<=33; hen++)  //内层循环控制母鸡数量范围
        for(chicken=0; chicken<=100; chicken++)  //内层循环控制小鸡数量范围
        {
            //条件控制
            printf(“cock=%2d, hen=%2d, chicken=%2d\n”, cock, hen, chicken);
        }


下面是完整的代码:


#include<stdio.h>
int main()
{
    int cock, hen, chicken;
    for(cock=0; cock<=20; cock++)  //外层循环控制公鸡数量取值范围0~20
        for(hen=0; hen<=33; hen++)  //内层循环控制母鸡数量取值范围0~30
            for(chicken=0; chicken<=100; chicken++)  //内层循环控制小鸡数量取值范围0~100
            {
                if( (5*cock+3*hen+chicken/3.0==100) && (cock+hen+chicken==100) )
                //在内外层循环条件控制下小鸡数量的取值限制用难一组解的合理性
                printf("cock=%2d, en=%2d, chicken=%2d\n", cock, hen, chicken);
            }
}


运行结果:


cock= 0, en=25, chicken=75
cock= 4, en=18, chicken=78
cock= 8, en=11, chicken=81
cock=12, en= 4, chicken=84


C语言百钱百鸡问题代码及解析


补充说明:根据这三层循环可得到多种方案,但有些事不符合条件的,因此结果输出之前需要筛选合理方案,控制条件语句为:


if((5*cock+3*hen+chicken/3==100) && (cock+hen+chicken==100))


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇数据结构之二叉查找树Java实现源.. 下一篇Bash 中常见的字符串操作

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目