C++] 公元前五世纪,我国古代数学家张丘建在《算经》中提出了 "百鸡问题":一只鸡值五钱,一只鸡母值三钱,一只鸡雏值一钱。如果你想用一百美元买一百只鸡,那么鸡头、鸡妈妈和小鸡的价值分别是多少?请设计一种 "高效 "算法来解决这个问题。
最编程
2024-04-11 17:56:50
...
题目分析
公元前五世纪,我国古代数学家张丘建在《算经》一书中提出了“百鸡问题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?请设计一个“高效”的算法求解。
【要求】:
(1) 设计算法,输出满足条件的各组结果:
鸡翁 鸡母 鸡雏
1 XX YY ZZ
2 XX YY ZZ
3 XX YY ZZ
… … … …
(2) 提示(可根据自己思想解决):
5x+3y+z/3=100, x+y+z=100 ->7x+4y=100,
其中x: 0~14, step: 2; y: 0-25, step: 1,二重循环实现:
For (x=0;x<15;x=x+2) { //x必须是偶数才能满足7x+4y=100
For (y=0;y<=25-x;y++) {
If (7*x+4*y != 100) continue;
Z=100-x-y;
If (z%3 ! = 0) continue; //z必须是3的整数倍
//输出一组结果(x,y,z)
}
}
算法分析
通过两个循环,把数据进行选择,如果满足百钱买百鸡,就输出情况,注意钱数与购买个数之间的关系
问题可以优化成n钱买n鸡问题,只要把代码中的20->(n/5);33->(n/3);z->n-y-x;即可,然后在前提中
输入确定n的值即可。
代码实现
//============================================================================
// @FileName :1_3_chicken
// @Author :小何学长
// @Version :1.0
// @Date :2020.9.23
// Description :
/*
公元前五世纪,我国古代数学家张丘建在《算经》一书中提出了“百鸡问题”:
鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。
百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?请设计一个“高效”的算法求解。
——(此处拓展为n元钱买n只鸡)
*/
//============================================================================
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
void buyResult(int x, int y, int z, int num) {
cout << "\t鸡翁\t鸡母\t鸡雏" << endl;
cout << num << "\t" << x << "\t" << y << "\t" << z << endl;
}
void creatData() {
int x, y, z, n, num = 1;
cout << "请输入n元钱买n只鸡问题的n值:" << endl;
cin >> n;
cout << "求解如下:\n-----------------------------------" << endl;
for (x = 0; x <= n / 5; x++) {
for (y = 0; y <= n / 3; y++) {
z = n - y - x;
if (z % 3 != 0) continue;
if (5 * x + 3 * y + (z / 3) == n) {
buyResult(x, y, z, num);
num++;
}
}
}
}
int main()
{
creatData();
cout << "\n-----------------------------------" << endl;
system("pause");
return EXIT_SUCCESS;
}
运行结果
示例1
示例2
上一篇: 快速找到最小公倍数的四种方法