C语言百钱白鸡问题

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

问题分析:我们将公鸡、母鸡、小鸡对应的变量分别设为cock、hen、chicken,则有chicken必定为三的倍数。同时满足cock+hen+chicken=100,并且满足5*cock+3*hen+chicken/3=100。本题我们需要用循环结构来进行穷举。需要三重循环,对cock循环,对hen的循环,对chicken的循环。cock的取值范围为0~20,hen的取值范围0~33,chicken的取值范围为0~100(但必须为3的倍数)。

 1 #include "stdio.h"
 2 #include "conio.h"
 3 void main()
 4 {
 5     int cock,hen,chicken;  //变量定义
 6     for(cock=0;cock<=20;cock++)    //公鸡数目穷举
 7         for(hen=0;hen<=33;hen++)     //母鸡数目穷举
 8             for(chicken=0;chicken<=100;chicken+=3)  //小鸡数目穷举
 9             {
10                 if(cock+hen+chicken==100&&cock*5+hen*3+chicken/3==100)   //条件判断
11                     printf("cock=%2d,hen=%2d,chicken=%2d\n",cock,hen,chicken);  //输出
12             }
13     getch();
14 }

我们还可以利用两重循环来实现,对于其中的一个变量我们可以采取用另外两个变量进行表示。如下代码:

#include "stdio.h"
#include "conio.h"
void main()
{
    int cock,hen,chicken;  //变量定义
    for(cock=0;cock<=20;cock++)    //公鸡数目穷举
    for(chicken=0;chicken<=100;chicken+=3)  //小鸡数目穷举
    {
        hen=100-cock-chicken; //母鸡数量
        if(cock+hen+chicken==100&&cock*5+hen*3+chicken/3==100&&hen>=0&&hen<=33)   //条件判断
            printf("cock=%2d,hen=%2d,chicken=%2d\n",cock,hen,chicken);  //输出
    }
    getch();
}

运行结果:

 

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

posted @ 2015-03-31 11:43  要有梦想,一定能实现  阅读(3089)  评论(0编辑  收藏  举报