(1)百钱百鸡问题

一、问题描述

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

二、思路:

1、这道题可以分别设公鸡为x,母鸡为y,小鸡为z,然后找关系列出三元一次方程组。为

(1):x+y+z=100;

(2):5x+3y+z/3=100;

2、对于不定方程足组,我们可以利用暴力枚举来找出解决方案。对于x,x的范围是0~20。对于y,y的范围是0~33,但由于y收到x的影响,实则不会循环到33.

对于z,由于最多只能买100只,z的最大范围是0~100。所以可以利用三层循环暴力枚举除结果。

三、代码实现

(1):三层暴力循环:

#include<iostream>
using namespace std;
int main()
{
    int x, y, z;
    for (x = 0; x <= 20; x++)
    {
        for (y = 0; y <= 33; y++)
        {
            for (z = 0; z <= 100; z++)
            {
                if (x + y + z == 100 && 5 * x + 3 * y + z / 3.0 == 100)
                {
                    cout << x << " " << y << " " << z << endl;
                }
            }
        }
    }
    return 0;
}
View Code
结果:

 

 

(2):优化

因为买的鸡的总数是一定的,所以对于z可以用x,y来表示:z=100-x-y;

所以可以优化掉一层循环,最总变为两层循环。

优化后代码:

#include<iostream>
using namespace std;
int main()
{
    int x, y, z;
    for (x = 0; x <= 20; x++)
    {
        for (y = 0; y <= 33; y++)
        {
            z = 100 - x - y;
            if (5 * x + 3 * y + z / 3.0 == 100)
            {
                cout << x << " " << y << " " << z << endl;
            }
        }
    }
    return 0;
}
View Code
结果:

 

 

 

posted @ 2023-04-12 12:48  海绵宝宝222  阅读(599)  评论(0)    收藏  举报