描述
    我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,如果要求鸡翁、鸡母、鸡雏都不为零,问鸡翁、鸡母、鸡雏各几何。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
    现在的问题是:用户输入鸡的数量和钱数,鸡翁、鸡母、鸡雏各为多少?如果有解,输出全部解,并按鸡翁数量由少到多的顺序输出;如果无解则输出“无解”。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
    输入格式
    用户在同一行内输入用空格分隔的两个正整数,分别表示鸡的数量和钱数‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
    输出格式
    每行输出一组结果,按鸡翁数、鸡母数、鸡雏数的顺序输出;‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
    有多组解时,按鸡翁数量由少到多输出;‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
    如果无解则输出“无解”。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
    输入输出示例
    输入:
    40 100
    输出:
    2 29 9
    6 22 12
    10 15 15
    14 8 18
    18 1 21
    本题是百钱百鸡问题的扩展,鸡的数量和钱的数量由用户输入,这样就有可能有一组解、多组和无解等多种情况出现。有解时的程序设计与百钱百鸡相同,难点在于无解的判定。用数学方法推导无解比较困难,但在程序设计中,可以通过一个标记简单的实现。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬我们先假设用户的输入是无解的,然后 进行遍历求解。题目要求有解时,按公鸡数量由小到多输出,所以先遍历公鸡数、再遍历母鸡数,小鸡数量通过计算获得。有解的条件是各种鸡的购买金额总数为用户输入的金额。但要注意题目同时隐含了两个条件:一是“鸡雏三值钱一”,所以小鸡数量应该是 3 的整数倍;二是小鸡数量通过计算获得,要保证小鸡数量是正数。所以构建以下判定条件:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

    1. if chicken % 3 == 0 and chicken > 0 and 5 * cock + 3 * hen + chicken // 3 == money:

    完整参考代码如下:

    1. #我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,如果要求鸡翁、鸡母、鸡雏都不为零,问鸡翁、鸡母、鸡雏各几何?
    2. #现在的问题是:用户输入钱和鸡的总数,计算鸡翁、鸡母、鸡雏各为多少?如果有解,输出全部解,并按鸡翁数量由少到多的顺序输出;如果无解则输出“无解”。
    3. num,money = map(int,(input().split())) # 将输入根据空格切分成列表,列表元素映射为整数
    4. solution = '无解' # 先假设无解,若找到符号条件的鸡数组合,改变此值
    5. for cock in range(1,money//5+1): # 全部买公鸡可以买 money//5 只
    6. for hen in range(1,money//3+1): # 全部买母鸡可以买 money//3 只
    7. chicken = num - cock - hen # 小鸡数量是总数减去公鸡和母鸡的数量
    8. # 若小鸡数量是3的整数倍且大于0,且每种鸡采购金额总和为输入的总钱数时,得到满足条件的解
    9. if chicken % 3 == 0 and chicken > 0 and 5 * cock + 3 * hen + chicken // 3 == money:
    10. print(cock, hen, chicken) # 输出本次得到的各种鸡的数量
    11. solution = '有解' # 找到一组解后,做一个有解的标记,改变solution的值
    12. if solution == '无解': # 若solution值仍为'无解',表明未找到满足条件的解
    13. print('无解')