鱼C论坛

 找回密码
 立即注册
查看: 1242|回复: 6

水仙花数那道题小鱼的答案我看不懂啊

[复制链接]
发表于 2019-8-11 18:06:11 | 显示全部楼层 |阅读模式

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

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

x
如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数。
编写一个程序,求 100~999 之间的所有水仙花数。
小鱼的答案:
for i in range(100, 1000):
    sum = 0
    temp = i
    while temp:
        sum = sum + (temp%10) ** 3
        temp //= 10         # 注意这里要使用地板除哦~
    if sum == i:
        print(i)


我想问他是怎么实现测算水仙花数的效果的,完全摸不着头脑,这是我自己写的,也能做出来。
for i in range(100,1000,1):
        a = i//100
        b = (i-100*a)//10
        c = i-100*a-10*b
        if i == a**3 + b**3 + c**3:
                print(i)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-8-11 18:44:24 | 显示全部楼层
本帖最后由 13572044595 于 2019-8-11 18:46 编辑

一些经典的 课后动动手 题,在论坛都有提问过,
先在论坛搜索一下,还是不懂在发【求助贴】

给你一个大牛的解答:

https://fishc.com.cn/forum.php?m ... =%CB%AE%CF%C9%BB%A8


                               
登录/注册后可看大图

                               
登录/注册后可看大图

                               
登录/注册后可看大图


1.png


                               
登录/注册后可看大图

                               
登录/注册后可看大图

                               
登录/注册后可看大图


2.png


                               
登录/注册后可看大图

                               
登录/注册后可看大图

                               
登录/注册后可看大图



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-11 20:35:57 | 显示全部楼层
本帖最后由 chordblue 于 2019-8-11 20:37 编辑

一个三位数 % 10等于该数的个位数   --》  // 10 变成二位数
一个二位数 % 10等于该数的个位数   --》  // 10 变成一位数
一个一位数 % 10等于该它自己         --》  // 10 变成0

每步是不是分别得到了这个三位数的个十百三个数?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-11 20:42:48 | 显示全部楼层
    sum = 0
    temp = i                          # 后面的计算过程要求这里必须使用临时变量代替 i,否则 i 值终将为 0,无法判断结果。 
    while temp:                       # 假设 temp = 159,则将会循环 3 次。
        sum = sum + (temp % 10) ** 3  # 3 次循环中,temp 的值将依次等于 159、15、1,(temp % 10) 的值相应地将依次等于 9、5、1 
        temp //= 10                   # 3 次循环中,temp 的值将依次等于 159、15、1,最终 temp 的值等于 0 值,这也是循环结束的条件。
    if sum == i:                      # 如果前面计算使用的不是 temp,则这里的 i 值已经是 0 值了。
        print(i)

    楼主的代码虽然可以运行,但是不够简洁,我给修改了一下,请楼主参考:
for i in range(100 , 1000):
    a = i // 100
    b = (i % 100) // 10
    c = i % 10
    if i == a ** 3 + b ** 3 + c ** 3:
        print(i)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-12 18:40:03 | 显示全部楼层
jackz007 发表于 2019-8-11 20:42
楼主的代码虽然可以运行,但是不够简洁,我给修改了一下,请楼主参考:

谢谢了,%用的少总是忘记了,哈哈。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-12 18:46:05 | 显示全部楼层
13572044595 发表于 2019-8-11 18:44
一些经典的 课后动动手 题,在论坛都有提问过,
先在论坛搜索一下,还是不懂在发【求助贴】

谢谢,知道了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-12 22:08:26 | 显示全部楼层
也可以尝试别的方法啊:
for i in range(100,1000):
    if int(str(i)[0])**3+ int(str(i)[1])**3 + int(str(i)[2])**3 == i:
        print(i)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-26 23:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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