鱼C论坛

 找回密码
 立即注册
查看: 1412|回复: 2

[已解决]角谷猜想

[复制链接]
发表于 2023-11-16 12:41:13 | 显示全部楼层 |阅读模式

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

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

x
temp = int(input("请输入一个自然数:"))
while temp % 2 ==0 :
        print(temp , "/" , 2 , "= ",temp / 2)
        temp = temp / 2
        if temp / 2 ==1 :
            print("2","/","2","=", "1")
            break
else:
    while temp % 2 !=0:
        temp = temp *3 +1
        print( temp, "/", 2, "=" ,temp /2)
        temp = temp / 2
        if temp / 2 ==1 :
            print("2","/","2","=", "1")
            break
        角谷猜想的内容是:任意给定一个正整数,若它为偶数则除以 2,若它为奇数则乘以 3 再加 1,得到一个新的自然数,按照这样的方法计算下去,最终的结果必将是 1。V,3Bf6:
代码问题在哪呢,我感觉应该是对的呀,可是出来的结果很有问题,不能计算大的数字,不然就得到的不是我想要的
最佳答案
2023-11-16 12:43:07
非代码区

问题分析:

你提到代码在处理大数时出现问题,并且得不到你期望的结果。让我们来看看可能的原因。

回答:

问题出在代码中对浮点数的处理上。在Python中,除法运算 / 得到的结果是浮点数,而不是整数。所以当 temp 为奇数时,执行 temp = temp / 2 得到的是浮点数,而不是整数。

此外,代码中有一些逻辑错误。在第一个 while 循环的 if 语句中,判断 temp / 2 == 1 是不准确的,因为浮点数除法可能会导致精度问题,无法准确判断是否等于 1。

为了解决这个问题,可以使用整数除法运算符 // 来替代浮点数除法运算符 /,这样得到的结果将是整数。另外,可以修改条件判断语句,判断 temp == 1 来结束循环。

同时,建议在代码中添加合适的注释来增加可读性。

下面是修改后的代码:
temp = int(input("请输入一个自然数:"))# 处理偶数的情况while temp % 2 == 0:    print(temp, "/", 2, "=", temp // 2)    temp = temp // 2    if temp == 1:        print("2", "/", "2", "=", "1")        break# 处理奇数的情况else:    while temp % 2 != 0:        temp = temp * 3 + 1        print(temp, "/", 2, "=", temp // 2)        temp = temp // 2        if temp == 1:            print("2", "/", "2", "=", "1")            breakprint("角谷猜想的内容是:任意给定一个正整数,若它为偶数则除以 2,若它为奇数则乘以 3 再加 1,得到一个新的自然数,按照这样的方法计算下去,最终的结果必将是 1。")
通过使用整数除法运算符 // 和修改条件判断语句,修改后的代码可以正确处理大数,并得到正确的结果。

希望这个回答对你有帮助!如果还有其他问题,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-16 12:41:18 | 显示全部楼层
这段代码实现了角谷猜想的计算过程,但存在一些问题。首先,代码中的缩进存在问题,需要统一使用相同的缩进方式。其次,代码中使用了浮点数除法,这可能导致精度丢失。最后,代码没有处理输入为负数或零的情况。

以下是修复后的代码:
temp = int(input("请输入一个自然数:"))
while temp != 1:
    if temp % 2 == 0:
        print(temp , "/" , 2 , "= ",temp // 2)
        temp = temp // 2
    else:
        print(temp , "*" , 3 , "+ 1 = ",temp * 3 + 1)
        temp = temp * 3 + 1

print("最终结果为 1")

修复后的代码使用整数除法和整数乘法,避免了浮点数精度丢失的问题。同时,修复了缩进问题,使代码更加清晰易读。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-16 12:43:07 | 显示全部楼层    本楼为最佳答案   
非代码区

问题分析:

你提到代码在处理大数时出现问题,并且得不到你期望的结果。让我们来看看可能的原因。

回答:

问题出在代码中对浮点数的处理上。在Python中,除法运算 / 得到的结果是浮点数,而不是整数。所以当 temp 为奇数时,执行 temp = temp / 2 得到的是浮点数,而不是整数。

此外,代码中有一些逻辑错误。在第一个 while 循环的 if 语句中,判断 temp / 2 == 1 是不准确的,因为浮点数除法可能会导致精度问题,无法准确判断是否等于 1。

为了解决这个问题,可以使用整数除法运算符 // 来替代浮点数除法运算符 /,这样得到的结果将是整数。另外,可以修改条件判断语句,判断 temp == 1 来结束循环。

同时,建议在代码中添加合适的注释来增加可读性。

下面是修改后的代码:
temp = int(input("请输入一个自然数:"))# 处理偶数的情况while temp % 2 == 0:    print(temp, "/", 2, "=", temp // 2)    temp = temp // 2    if temp == 1:        print("2", "/", "2", "=", "1")        break# 处理奇数的情况else:    while temp % 2 != 0:        temp = temp * 3 + 1        print(temp, "/", 2, "=", temp // 2)        temp = temp // 2        if temp == 1:            print("2", "/", "2", "=", "1")            breakprint("角谷猜想的内容是:任意给定一个正整数,若它为偶数则除以 2,若它为奇数则乘以 3 再加 1,得到一个新的自然数,按照这样的方法计算下去,最终的结果必将是 1。")
通过使用整数除法运算符 // 和修改条件判断语句,修改后的代码可以正确处理大数,并得到正确的结果。

希望这个回答对你有帮助!如果还有其他问题,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-24 02:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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