找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 2889|回复: 6

[讨论] 关于列举水仙花数的代码,孰优孰劣?请指教

1

主题

5

帖子

5

积分

贫民

积分
5
yysunny 发表于 2020-9-12 10:08:14 | 显示全部楼层 |阅读模式
新人发帖,求大佬们指教,拜谢!

题目:求100-999之间所有的水仙花数,水仙花数是指百位的3次方 + 十位的3次方 + 个位的三次方等于原数的整数。比如153。
我做了几种解法,哪种思路和运行效率是最好的呢?


1. 拆分百位十位个位,直接做运算
for i in range(100, 1000):
    str1 = str(i)
    if(int(str1[0])**3 + int(str1[1])**3 + int(str1[2])**3) == i:
        print("%d是水仙数" % i)



2. 算出百位个位十位,然后用while循环:
i = 100
while i <= 999:
    a = i // 100
    b = (i - a*100) // 10
    c = i % 10
    if (a**3 + b**3 + c**3) == i:
        print(i)
        i += 1
    else:
        i += 1



3. 小甲鱼的标准答案
1.  for i in range(100, 1000):
2.      sum = 0
3.      temp = i
4.      while temp:
5.          sum = sum +(temp%10) ** 3
6.          temp //= 10        # 注意这里要使用地板除哦~
7.      if sum == i:
8.          print(i)




回复

使用道具 举报

0

主题

1

帖子

1

积分

贫民

积分
1
mrpeng 发表于 2020-11-5 11:43:26 | 显示全部楼层
import time
start=time.time()
tabel_ = [i**3 for i in range(10)]
for i in range(100, 1000):
    a, b, c = (i // 100) % 10, (i // 10) % 10, i % 10
    if tabel_[a] + tabel_[b] + tabel_[c] == i:
        print(i)
end=time.time()
print(end-start)
回复 支持 1 反对 0

使用道具 举报

1

主题

5

帖子

5

积分

贫民

积分
5
yysunny  楼主| 发表于 2020-9-12 22:14:06 | 显示全部楼层
大佬们呢,来人啊
回复 支持 反对

使用道具 举报

0

主题

11

帖子

11

积分

贫民

积分
11
屁桃 发表于 2020-9-14 16:36:48 | 显示全部楼层
计算一下每个消耗的时间就行了
回复 支持 反对

使用道具 举报

1

主题

5

帖子

5

积分

贫民

积分
5
yysunny  楼主| 发表于 2020-9-15 09:42:58 | 显示全部楼层
屁桃 发表于 2020-9-14 16:36
计算一下每个消耗的时间就行了

怎么计算啊?
我光是看是比较不出来差别
回复 支持 反对

使用道具 举报

0

主题

956

帖子

956

积分

圣骑士

积分
956
sheeboard 发表于 2020-9-15 12:55:51 | 显示全部楼层
start=time.time()
run your function
end=time.time()
print(end-start)
如果是用ipython直接%timeit
回复 支持 反对

使用道具 举报

1

主题

5

帖子

5

积分

贫民

积分
5
yysunny  楼主| 发表于 2020-9-15 14:02:16 | 显示全部楼层
sheeboard 发表于 2020-9-15 12:55
start=time.time()
run your function
end=time.time()

非常感谢,学到了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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