题目:输出水仙花数(水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153))
for i in range (1,10): #设置i的取值范围为 1-9
for j in range (0,10): #设置j的取值范围为0-9
for k in range (0,10): #设置k的取值范围为0-9
if i*100+j*10+k == i**3+j**3+k**3: #判断i乘100+j乘10+k是否等于i的3次幂+j的3次幂+k的3次幂 如果相等则走到子代码中
print("水仙花数有:%s"%(i*100+j*10+k)) 打印i乘100+j乘10+k的值 打印结果为:
水仙花数有:153
水仙花数有:370
水仙花数有:371
水仙花数有:407
解题思路:定义一个三位数 ijk(i为百位,j为十位,k为个位),所以i乘100+j乘10+k就是一个三位数,然后使整个三位数等于i的三次幂+j的三次幂+k的三次幂就行,这时候我们就可以用遍历去一组数一组数的计算,符合结果的就打印出来。
整理下这个题目for循环的大致流程:
当i等于1时,代码走到了下面的j的for循环,此时i=1 j=0 然后再走到下面k的for循环中,此时 i =1 j=0 k=0然后去进行if判断,100不符合结果,然后回到k的for循环中,继续k的for循环,此时 i=1 j=0 k=1,然后if判断不符合,继续进行k的for循环,直到i=1 j=0 k=9 发现k的for循环都走完了,此时再返回到j的for循环中,得到i =1 j=1 ,然后继续进入到下面k的for循环中,此时i=1 j=1 k=0,然后继续进行直到i=1,j=1,k=9 ,再返回到j的for循环中,此时i=1 j=2然后进入到下面k的for循环,此时i=1 j=2 k=0,就这么一直遍历,直到 i=1 j=9 k=9后,返回到i的for循环中,此时 i=2,然后进入再到下面j的循环 i=2 j=0然后走到下面k的循环中此时i=2 j=0 k=0,就这么一直遍历下去,最后直到i=9 j=9 k=9,发现所有的数字都遍历过一遍了,结束for循环遍历。这样就能吧100-999所有的数都尝试一遍,然后把符合水仙花的数打印出来。
简单梳理下就是:首先当i=1时,因为子代码有j的遍历,所以首先从j=0开始,然后j下面还有k的遍历,所以当从k=0到k=9都遍历完后,再回到j的遍历中继续进行j的遍历,然后就该进行j=1时,k的从0到9的遍历,然后再回到j,直到j=9并且进行完j=9时k的从0到9的遍历,再回到i的遍历上,进行i=2,然后又回到了j的遍历,然后再进行j和k的从0到9的遍历,结束后再回到i的遍历上,直到i=9时,j和k的0到9遍历完,结束循环。如果一步一步打印就是从100按顺序打印到999.
下图为公众号二维码,内容会同步发出,大家可以关注一起学习
这个是张狗子小哥哥的公众号,会分享一些平时的工作心得,可以关注看下。