鱼C论坛

 找回密码
 立即注册
查看: 1746|回复: 3

[已解决]过来看看水仙花拉@--@

[复制链接]
发表于 2023-7-8 00:15:38 | 显示全部楼层 |阅读模式

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

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

x
# 1. 编写一个程序,求 100~999 之间的所有水仙花数。
   
# 如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数。
for i in range(100,1000):
    for a in range(1,10):
        for b in range(10):
            for c in range(10):
                if i == a * 100 + b * 10 + c * 1 and i == a ** 3 + b ** 3 + c ** 3:
                    print(i)
大佬们觉得这答题还有什么别的方案
最佳答案
2023-7-8 06:15:53
你的方案已经可以找出所有的水仙花数,但它的效率不是最优的。在你的方案中,你遍历了每个三位数的每一位,并判断这个数是否满足水仙花数的条件。然而,对于每一个数i,其实只需要计算一次各个位数的立方和就可以了,这样可以节省计算量。

下面是一个更加高效的方案:
for i in range(100,1000):
    a = i // 100  # 百位数
    b = i // 10 % 10  # 十位数
    c = i % 10  # 个位数
    if i == a3 + b3 + c**3:
        print(i)
在这个版本中,我们直接使用了数字的整除和取模运算来提取出一个三位数的每一位,这样我们就可以直接计算每一位的立方和,然后判断这个数是否满足水仙花数的条件。这个方案更简洁,同时也更高效。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-8 00:18:59 | 显示全部楼层
本帖最后由 歌者文明清理员 于 2023-7-8 00:22 编辑

你可以枚举数字
然后把数字按照数位拆开
并且如果你已经有百位十位个位的话
就没必要枚举整个数字了

解法2
for i in range(100,1000):
    a, b, c = str(i) # 字符串可以被拆分
    if i == (a ** 3 + b ** 3 + c ** 3):
        print(i)

解法3
for a in range(1, 10):
    for b in range(10):
        for c in range(10):
            if (a * 100 + b * 10 + c) == a ** 3 + b ** 3 + c ** 3:
                print(i)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-8 06:15:53 | 显示全部楼层    本楼为最佳答案   
你的方案已经可以找出所有的水仙花数,但它的效率不是最优的。在你的方案中,你遍历了每个三位数的每一位,并判断这个数是否满足水仙花数的条件。然而,对于每一个数i,其实只需要计算一次各个位数的立方和就可以了,这样可以节省计算量。

下面是一个更加高效的方案:
for i in range(100,1000):
    a = i // 100  # 百位数
    b = i // 10 % 10  # 十位数
    c = i % 10  # 个位数
    if i == a3 + b3 + c**3:
        print(i)
在这个版本中,我们直接使用了数字的整除和取模运算来提取出一个三位数的每一位,这样我们就可以直接计算每一位的立方和,然后判断这个数是否满足水仙花数的条件。这个方案更简洁,同时也更高效。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-8 09:25:59 | 显示全部楼层
我用的列表推导式来做的,但是有局限性
i_list = [i for i in range(100,1000) if i == (int(str(i)[0])**3+int(str(i)[1])**3+int(str(i)[2])**3)]
print(i_list)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-13 22:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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