公元前五世纪,我国古代数学家张丘建在《算经》一书中提出了“百鸡问题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?请设计一个“高效”的算法求解。
【要求】:
(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) } } 12345678910111213 算法分析
通过两个循环,把数据进行选择,如果满足百钱买百鸡,就输出情况,注意钱数与购买个数之间的关系
问题可以优化成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; }
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 运行结果 示例1