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

时间: 2024-10-07 17:21:04

C语言百钱白鸡问题的相关文章

Craps赌博游戏、百钱白鸡、七星彩选号、抓小偷、21根火柴、10000以内完美数

Craps赌博游戏 游戏规则:同时扔两颗骰子,第一次扔出的点数数7或则11玩家胜,扔出2.3或则12庄家胜利,否则继续扔骰子. 以后只要扔出和第一次相同的点数玩家胜,扔出7庄家胜. 玩家每次进入有1000的筹码,输完游戏结束! 1 public static void gambleGame() { 2 int a = 0; 3 int money = 1000; 4 for (int j = 0;; j++) { 5 if (money > 0) { 6 System.out.println(&qu

百钱白鸡(for循环的练习)

<!doctype html> <html> <head> <meta charset="utf-8"> <title>无标题文档</title> </head> <body> </body> </html> <script> // 百钱百鸡 公鸡2文,母鸡1文,小鸡半文,每种至少一只,100文买100只鸡有多少可能性 // 写条件gj*2 + mj*1

百钱白鸡问题

伪代码描述:for(int x=0;x<=100;x++){ for(int y=0;y<=100-x;j++) z=100-x-y; if(z%3==0){ if(5*3+3*y+z/3==100){ then(x,y,z) is solution; } } }

0002_百钱买鸡

百钱买鸡:公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱,用100文钱买100只鸡,其中公鸡,母鸡,小鸡都必须要有,问公鸡,母鸡,小鸡要买多少只刚好凑足100文钱? 思路:设定公鸡,母鸡,小鸡各买x,y,z只,则满足下列条件: x+y+z=100; 5x+3y+z/3=100: 1 __author__ = 'qq593' 2 # /usr/bin/python 3 # -*- coding:utf-8 -*- 4 5 #x is the unknown number 6 for y in ra

SDUST 软件工程2016-作业4-A 百钱买鸡问题

解决百钱买鸡问题原本并不困难,关键的是这道题对其进行了升级,测试数据太大,传统的解法,像三重循环,二重循环都会导致超时. 这道题正确的解法应该是结合数学方程进行化简,将其转化为1层循环: x+y+z=n ax+by+c/d*z=m 由上述两个方程联立可用其他量表示出y来.从而只需要枚举x就能解决该题. 在求方程之后注意要化简,只有能整除的时候才进行整除.最后与m比较的时候因为c/d的问题,所以等式两边同时乘以d以消除误差. 最后千万不要加上z%d==0的条件,因为例如当3元买12小鸡的时候,实际

Java实现百钱买百鸡

1.问题描述 今有鸡翁一,值钱伍:鸡母一,值钱三:鸡鶵三,值钱一.凡百钱买鸡百只,问鸡翁.母.鶵各几何?答曰:鸡翁四,值钱二十:鸡母十八,值钱五十四:鸡鶵七十八,值钱二十六.又答:鸡翁八,值钱四十:鸡 母十一,值钱三十三,鸡鶵八十一,值钱二十七.又答:鸡翁十二,值钱六十:鸡母四.值钱十二:鸡鶵八十 四,值钱二十八." 2.实现源码 /** * @Title:HundredHen.java * @Package:com.you.hen * @Description:百钱买百鸡 * @author:

3. 百钱买白鸡问题

这是一个古老而非常经典的问题,最早源自中国古代的算经,中国古代数学家张丘建在他的算经中提出了著名的百钱买白鸡的问题: 鸡翁1, 值钱5,鸡母1,值钱3,鸡雏3值钱1,百钱买白鸡,问翁,母,雏各几何? 100文钱买100只鸡,公鸡5文钱一只,母鸡3文一只,小鸡3只1文钱:100文钱买了100只鸡,请问公鸡,母鸡,小鸡各有多少? #include <stdio.h> #include <stdlib.h> int main() {     int i,j,k;     for(i=0;

算法-百钱买白鸡

百钱买百鸡的问题算是一套非常经典的不定方程的问题,题目很简单:公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱, 用100文钱买一百只鸡,其中公鸡,母鸡,小鸡都必须要有,问公鸡,母鸡,小鸡要买多少只刚好凑足100文钱. 分析:估计现在小学生都能手工推算这套题,只不过我们用计算机来推算,我们可以设公鸡为x,母鸡为y,小鸡为z,那么我们可以得出如下的不定方程 x+y+z=100, 5x+3y+z/3=100, 下面再看看x,y,z的取值范围,由于只有100文钱,则5x<100 => 0<x&l

百鸡百钱问题

描述    我国古代数学家张丘建在<算经>一书中提出的数学问题:        鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一.        百钱买百鸡,问鸡翁.鸡母.鸡雏各几何?    输入        输出    鸡翁数量    鸡母数量    鸡雏数量 public class Main {     public static void main(String[] args){                  for (int i = 1; i <= 20; i++) {