DAY 010--水仙花数for循环应用

010问题:                            

什么是水仙花数?水仙花数是指一个 n 位正整数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3+ 3^3 = 153)。

要求:打印输出所有的三位数"水仙花数"。

 

流程分析:                                                                    

思路1:

1、设置范围:三位数的水仙花i,将i从100到999之间循环找书

2、由于i是整数,将i转为字符串,然后将i的百位数、十位数、个位数(x,y,z)分别取出并再次转换为整数

3、设定条件:

  if pow(x,3)+pow(y,3)+pow(z,3)==i

4、如果条件满足就打印i

 

思路2:

1、现将这三位数的百位i、十位j、个位k分别从(1,9)、(0,9)、(0,9)这三个范围中枚举

2、判定条件:

  if pow(i,3)+pow(j,3)+pow(k,3)==i*100+j*10+k

3、如果条件满足就打印ijk

 

 

代码分析:                                                                    

 代码1

for i in range(100,1000):
    x,y,z=map(int,str(i))
    if pow(x,3)+pow(y,3)+pow(z,3)==i:
        print(i)

#输出结果
153
370
371
407
思路1

 

代码2

for i in range(1,10):
    for j in range(10):
        for k in range(10):
            if i**3+j**3+k**3==i*100+j*10+k:
                print(i,j,k)

#输出结果
1 5 3
3 7 0
3 7 1
4 0 7
思路2

 

 

题目反思:                                                                    

1、思路1需要注意如和将整数转为字符串,因为字符串是有顺序的,然后再转为整数,用到的map函数

2、思路2和枚举法很相似,幂次方也可以用pow函数来代替

 

 

新学知识点:                                                                

1、一道题的两种不一样的思路,思路1是我想出来的,思路2是题目的标准答案,我的思路可能转换起来比较麻烦,标准代码一目了然

 

2、pow有两种用法

  • 用法1
import math
math.pow( x, y )
  • 用法2
pow(x,y[,x])
  • x -- 数值表达式。
  • y -- 数值表达式。
  • z -- 数值表达式。

函数是计算x的y次方,如果z在存在,则再对结果进行取模,其结果等效于pow(x,y) %z

注意:pow() 通过内置的方法直接调用,内置方法会把参数作为整型,而 math 模块则会把参数转换为 float。

 

3、map(function, iterable, ...)

 

  • function -- 函数,有两个参数
  • iterable -- 一个或多个序列
map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
#相当于
[3, 7, 11, 15, 19]

 

 

Mark on 2018.04.13

posted @ 2018-04-13 14:58  JunSheep  阅读(458)  评论(0编辑  收藏  举报