鱼C论坛

 找回密码
 立即注册
查看: 1842|回复: 12

[已解决]求解鸡兔同笼问题

[复制链接]
发表于 2022-6-13 09:22:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
经典问题,不需要我做太多描述了把,如何用python优雅的完成,老师给了
head = int(input("请输入头数:"))
foot = int(input("请输入脚数:"))
ji = 0
tu = 0
answer = False

for ji in range(head + 1):
    for tu in range(head + 1):
        if ji + tu == head and 2 * ji + 4 * tu == foot:
            answer = True
            break   # break是跳出本层if循环,还是可以跳出for循环?
    if answer:  # 这里的if answer是起什么作用啊?
        break 
if answer:
    print(f"鸡有{ji}只,兔子有{tu}只")
else:
    print("此题无解,请重新输入")
一个方案,但其中的break语句,我还是有些不理解,故请大咖们给予解答?
最佳答案
2022-6-13 10:10:51
本帖最后由 傻眼貓咪 于 2022-6-13 10:14 编辑

我的优雅代码:
head = int(input("请输入头数:"))
foot = int(input("请输入脚数:"))
a = foot - 2 * head
if a&1 or a >> 1 < 0 or head - (a >> 1) < 0:
        print("此题无解,请重新输入")
else:
        print(f"鸡有{head - (a >> 1)}只,兔子有{a >> 1}只")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-6-13 09:47:10 From FishC Mobile | 显示全部楼层
break只能跳出离它最近的循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-13 09:51:53 From FishC Mobile | 显示全部楼层
break 语句用来跳出循环,那么什么是循环语句呢?就是 for 或 while,所以 break 是跳出 for 语句,而 if 是判断语句。

if answer 用来跳出另外一个 for 语句(因为有两个 for。
一个 break 只能跳出一个 for,所以外面再多一个判断语句 if answer 用来跳出最外层的 for 语句。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-13 09:52:47 From FishC Mobile | 显示全部楼层
if answer就相当于   if answer不等于0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-13 10:10:51 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
本帖最后由 傻眼貓咪 于 2022-6-13 10:14 编辑

我的优雅代码:
head = int(input("请输入头数:"))
foot = int(input("请输入脚数:"))
a = foot - 2 * head
if a&1 or a >> 1 < 0 or head - (a >> 1) < 0:
        print("此题无解,请重新输入")
else:
        print(f"鸡有{head - (a >> 1)}只,兔子有{a >> 1}只")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-13 10:23:51 From FishC Mobile | 显示全部楼层
傻眼貓咪 发表于 2022-6-13 10:10
我的优雅代码:

a >> 1 < 0什么意思呢
.5*a<0  ??那就直接a<0呗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-13 10:26:57 From FishC Mobile | 显示全部楼层
wp231957 发表于 2022-6-13 10:23
a >> 1 < 0什么意思呢
.5*a

a >> 1 是位元运算右移,如同 a // (2^1)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-13 10:28:22 From FishC Mobile | 显示全部楼层
wp231957 发表于 2022-6-13 10:23
a >> 1 < 0什么意思呢
.5*a

也可以直接 a < 0 吧,因为我没有想这么多,直接就写了,哈哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-13 10:29:10 From FishC Mobile | 显示全部楼层
傻眼貓咪 发表于 2022-6-13 10:26
a >> 1 是位元运算右移,如同 a // (2^1)

地板除,我还以为是.5呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-13 11:09:44 | 显示全部楼层
感谢@傻眼貓咪 解答了我对于break的疑问,同时感谢你提供的优雅的代码,复制了可以运行,但功力有限,看不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-13 11:11:33 From FishC Mobile | 显示全部楼层
wangxiaolvshi 发表于 2022-6-13 11:09
感谢@傻眼貓咪 解答了我对于break的疑问,同时感谢你提供的优雅的代码,复制了可以运行,但功力有限,看不 ...

有啥看不懂的,不就是初中的解方程吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-13 18:25:03 | 显示全部楼层
他用到的a>>1,位元运算右移,我就不懂了,还没学到这里
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-13 18:30:06 From FishC Mobile | 显示全部楼层
wangxiaolvshi 发表于 2022-6-13 18:25
他用到的a>>1,位元运算右移,我就不懂了,还没学到这里

右移是指二进制的右移
比如10进制的10转二进制是1010
那么右移一位变成0101转10进制就是5
0101再右移一位是0010转10进制就是2
所以右移一位就相当于地板除 //2
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 21:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表