鱼C论坛

 找回密码
 立即注册
查看: 2564|回复: 10

[已解决]小甲鱼第九课课后题水仙花数

[复制链接]
发表于 2017-7-20 11:55:33 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 ouwen116 于 2017-7-20 12:27 编辑

编写一个程序,求 100~999 之间的所有水仙花数。
如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数。
  1. for i in range(100, 1000):     #看得懂
  2.     sum = 0                     #看得懂
  3.     temp = i                    #看得懂
  4.     while temp:                 #看得懂
  5.         sum = sum + (temp%10) ** 3  #看不懂,彻底蒙B了,搞不懂
  6.         temp //= 10                  #temp = temp//10,地板除看得懂
  7.     if sum == i:                     #为什么sum == i,就好了呢? (sum = sum + (temp%10) ** 3)这里面
  8.                                        #(temp % 10) ** 3#(这是个位数的立方,我看懂了#但+sum就OK了真心看不懂
  9.         print(i)
复制代码



自己写的代码,各位鱼友看看有没有什么问题:
  1. for i in range(100,1000):
  2.     temp = i
  3.     temp1 = (temp%10)**3            #求i的个位数
  4.     temp2 = (temp//10//10)**3     #求i的百位数
  5.     temp3 = (temp//10%10)**3     #求i的十位数
  6.     if temp == temp1 + temp2 + temp3:
  7.         print(i)
复制代码
最佳答案
2017-7-20 12:43:14
1,第一次循环
    sum = sum + (temp%10) ** 3   意思就是取temp的个位数的立方
    temp //= 10                            意思是除以10,整除去掉余数(例如:283//10=28)
2,第二次循环
   sum=sum+(temp%10)**3       这时temp已经变成了两位数,现在除10取余数就相当于原数据的十位,而sum=个位的立方(sum)+原数据十位的立方
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-7-20 11:57:11 | 显示全部楼层
上面的代码没有错,,你不要在前面加上数字
  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)
复制代码

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

使用道具 举报

发表于 2017-7-20 11:57:58 | 显示全部楼层
你写的代码没问题,每个问题都有很多思路,支持你!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-20 12:04:39 | 显示全部楼层
新手·ing 发表于 2017-7-20 11:57
上面的代码没有错,,你不要在前面加上数字

哦,可以运行了,谢谢,但为什么我看不懂这段代码的思路啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-20 12:10:03 | 显示全部楼层
小甲鱼是用一个循环来处理的。以一个数字‘123’为例:
第一次循环:temp=123循环为真执行。
temp%10取个位数3
temp //= 10相当于temp = temp // 10
即temp变成了12
再次循环。取到2,变成1
再次循环,取到1,变成0,循环终止。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-20 12:24:21 | 显示全部楼层
ouwen116 发表于 2017-7-20 12:04
哦,可以运行了,谢谢,但为什么我看不懂这段代码的思路啊?
  1. for i in range(100, 1000):     #看得懂
  2.     sum = 0                     #看得懂
  3.     temp = i                    #看得懂
  4.     while temp:                 #看得懂
  5.         sum = sum + (temp%10) ** 3  #看不懂,彻底蒙B了,搞不懂
  6.         temp //= 10                  #temp = temp//10,地板除看得懂
  7.     if sum == i:                     #为什么sum == i,就好了呢? (sum = sum + (temp%10) ** 3)这里面
  8.                                        #(temp % 10) ** 3#(这是个位数的立方,我看懂了#但+sum就OK了真心看不懂
  9.         print(i)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-20 12:25:47 | 显示全部楼层
新手·ing 发表于 2017-7-20 11:57
上面的代码没有错,,你不要在前面加上数字
  1. for i in range(100, 1000):     #看得懂
  2.     sum = 0                     #看得懂
  3.     temp = i                    #看得懂
  4.     while temp:                 #看得懂
  5.         sum = sum + (temp%10) ** 3  #看不懂,彻底蒙B了,搞不懂
  6.         temp //= 10                  #temp = temp//10,地板除看得懂
  7.     if sum == i:                     #为什么sum == i,就好了呢? (sum = sum + (temp%10) ** 3)这里面
  8.                                        #(temp % 10) ** 3#(这是个位数的立方,我看懂了#但+sum就OK了真心看不懂
  9.         print(i)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-20 12:43:14 | 显示全部楼层    本楼为最佳答案   
1,第一次循环
    sum = sum + (temp%10) ** 3   意思就是取temp的个位数的立方
    temp //= 10                            意思是除以10,整除去掉余数(例如:283//10=28)
2,第二次循环
   sum=sum+(temp%10)**3       这时temp已经变成了两位数,现在除10取余数就相当于原数据的十位,而sum=个位的立方(sum)+原数据十位的立方
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-20 12:43:30 | 显示全部楼层
首先,用temp%10,这里是“取个位数的意思”!然后在循环中,while temp循环中,每进行一次循环,temp会去掉各位数,即temp//=10.最后一点是,while temp的循环条件,最终temp会等于0,从而结束循环。相信明白这几点应该理解没问题了。举个栗子
i=153
temp赋值,为153,
while 153#153为真,循环继续
temp%10等于3,其三次方的值加在sum中
temp//=10,temp变成15
判断,while 15#15为真,循环继续
依次类推。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-20 12:43:54 | 显示全部楼层
  1. for 数 in range(100, 1000):
  2.     立方和 = 0
  3.     商 = 数
  4.     while 商:
  5.         商,余 = divmod(商,10)
  6.         立方和 += 余**3
  7.         
  8.     if 立方和 == 数:
  9.         print(数)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-20 13:07:19 | 显示全部楼层

(sum=个位的立方(sum)+原数据十位的立方)
谢谢版主,模模糊糊有点懂了。
一直在纠结:
sum应该=个位的立方(sum)+原数据十位的立方+百位数的立方 #(要加上百位数上的立方才合常理)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-11 03:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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