I am a teacher!

导航

习题解析之:鸡兔同笼

【问题描述】
大约在1500年前,《孙子算经》中记载一个有趣的问题:今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?
大概的意思是:有若干只鸡兔同在一个笼子里,从上面数,有35个头,从下面数,有94只脚,问笼中各有多少只鸡和兔?
请编一个程序,用户在同一行内输入两个整数,代表头和脚的数量,编程计算笼中各有多少只鸡和兔(假设鸡和兔都正常,无残疾)。如无解则输出Data Error!

从同一行读入两个数参考下面的示例代码,
a, b = map(int,input().split(','))   # 将输入的以逗号分隔的两个值,转换为整数后命名为a和b

输入格式
输入为一行,以空格分隔的两个整数heads, legs,分别代表鸡兔的总头数和总脚数。

输出格式
若有解输出:
有m只鸡,n只兔
若无解输出:
Data Error!

示例 
输入:
35 94
输出:
有23只鸡,12只兔

【编程思路】

        设笼子中鸡有 chicken 只,兔子有 rabbit 只,一共有 heads 个头,legs 只脚。

        先假设笼子中全部都是兔,则 heads 只兔应该有 4 * heads 只脚,若笼子中脚的数目 legs 超过 4 * heads,即 legs > 4 * heads,显然无解。

        再假设笼子中全部都是鸡,则 heads 只鸡应该有 2 * heads 只脚,若笼子中脚的数目 legs 小于 2 * heads,即 legs < 2 * heads,显然也无解。

        若脚的数目 legs 不小于 2 * heads,则多出来的脚(legs - 2 * heads)只能将鸡换成兔子来凑齐。一只鸡转换为一只兔子可以多 2 只脚,现在多 legs - 2 * heads只脚,将它除以 2 就得到兔子数目。即兔子数 rabbit =(legs - 2 * heads) // 2。要使 legs - 2 * heads 能整除 2 ,legs - 2 * heads 必须是偶数,否则也无解。兔子数求出后, 鸡的只数也可确定。chicken = heads - rabbit。

        按上面的思路编写的源程序如下:

image

 

posted on 2025-11-11 18:19  aTeacher  阅读(0)  评论(0)    收藏  举报