Python 基础算法 阿姆斯特朗数 斐波那契数列 冒泡排序 插入排序

Armstrong number 阿姆斯特朗数

如果一个n位正整数等于其各位数字的几次方之和则称这个数为阿姆斯特朗数例如 1^3+5^3+3^3 = 153

一种三位数其各个数之立方和等于该数则称这种数为水仙花数 水仙花数一共有四个 153,370,371,407

想要计算阿姆斯特朗数首先我们需要确定一个范围 既然是 累加和 负数方面我们不会考虑所以只要计算大于0

以上的数字就好 

计算数列之前 我们需要想好计算数列的大致方法 既然是确定范围内的阿姆斯特朗数 就需要在确定的区间内循环取值来确定每一个数字是不是符合阿姆斯特朗数的标准 所以 需要循环控制语句来操作。

for num in range(1 max):
    pass

            然后 需要一个能接受用户输入的变量 max  还需要知道输入的位数用来充当幂指数 n  以及输入数字的各个数字的值dight

然后将所获得的值根据公式累加 

dight = temp%10
total = dight**n

最后用if语句判断出符合条件的数字输出符合条件的数字:

#接受最大值确定范围
max = int(input("输入想要阿姆斯特朗数的范围最大值:"))
#循环遍历取值范围并判断是否为阿姆斯特朗数
for num in range(1,max):
    #初始化累加变量
    total = 0
    #获取当前数字的位数充当幂指数
    n = len(str(num))
    #将num 判断数字备份
    temp = num
    #使用while循环获取数字的各个位数幂次方累加和
    while temp > 0:
        #获取每个位数的值(个 十 佰 千)
        digit = temp%10
        #计算当前位数的N次幂进行累加
        total += digit**n
        #减少一位
        temp//=10
    pass
    #判断是否符合amstl数 输出
    if total == num:
        print(num,end=',')
        pass
    pass

斐波那契数列

斐波那契数列 又称为兔子数列:1,1,2,3,5,8,13,21,34......

在数学上斐波那契数列以如下被以递归的方法定义:F(0)=1,F(1)=1,F(2)=2,F(n)=F(n-1)+F(n-2)(n>2 n\epsilonN*)

在理想环境下   假设 开始有一对兔子未成年的  三个月后 兔子成年 然后会生一对小兔子 小兔子也会生长三个月 然后也会             生出小兔子 在这种环境下可以推导

第一个月: 1对小兔子                                                         1
第二个月: 1对小兔子                                                         1
第三个月: 1对大兔子  1对小兔子                                               2
第四个月: 1对大兔子  1对小兔子(本月生) 1对小兔子(上月生)                    3
第五个月: 1对大兔子  1对大兔子 (3月小) 2对小兔子(本月) 1对小兔子(上月生)   5
第六个月: 3对大兔子  3对小兔子(本月) 2对小兔子(上月)                       8

根据推导发现 规律第三位数字起 后一位数字等于前两位数字之和,依据这个结果会发现第三月等于第一月加第二月的和

设置 n1 和n2, n3     n3 = n1 + n2  累加完后 n1 的值会等于n2 n2 的值又会等于n1+n2 即:

n3(第三位) = n1(第一位) + n2(第二位) 
n1(变更为第二位) = n2 
n2(变更为第三位) = n1 +n2 = n3

在python中想要交换两个变量的值是可以不通过第三个变量实现的
即:  n1 ,n2 = n2 ,n1
这样就可以实现两个值的互换  通过这种语法上面的代码 就可以简化一下
即: n1 ,n2 = n2,n1 + n2
通过这样的方式 使用循环将这两个值更新就可以得到想要的斐波那契数列。

有了这个代码段 根据推导就可以写出想要斐波那契数列个数的代码为

#接受用户终端输入的数字确定斐波那契数列的个数
items = int (input("输入想要的斐波那契数个数:"))#int 用来确保输入的是数字
#将n1  n2分别赋值
n1 ,n2 = 0,1
print("eibonacci数列:")
#设置计数器
count = 1
#使用while循环 用True来保证循环一定会执行 注意True 首字母大写
while True:
    #因为第二项最后的值会是第一项与第二项的和 也就是第三项 所以输出第二项作为结果
    print(n2,end=",")
    #借助循环更新n1,n2 的值
    n1 ,n2 = n2 ,n1 + n2
    #计数器自增  注意python中没有 “++” 
    count += 1
    #if语句判断退出条件
    if count > items:
        break
    pass

冒泡排序

冒泡排序就是通过不断地比较两个相邻的元素,如果第一个元素大于(或小于)第二个元素,则将两个值进行互换 ,互换后的第二个元素再与第三个元素比较重复上一步直到最后一位 这时最后一位应该是最大值(或最小值)

重复上一步 最后一位除外

时间复杂度:O(n)~O(n^2)(注:指最坏情况下的时间复杂度)

listx = [34,19,20,30,10,5,88,40]
#把最大的挪到最后 每轮次两个相邻的数都要比较一编
for i in range(len(listx)-1):#交换轮次
    for j in range(len(listx)-i-1):#优化比较次数 每轮比较完后 减少一位 少比较一次
        if listx[j] > listx[j+1]:
            listx[j],listx[j+1] =listx[j+1],listx[j]
            pass
    pass
print(listx)
listx = [34,19,20,30,10,5,88,40]#把小的往前挪

for i in range(len(listx)-1):
    for j in range(i+1,len(lista)):
        if listx[i] > listx[j]:
            listx[j],listx[i] =listx[i],listx[j]
            pass
    pass
print(listx)

插入排序

插入排序是根据想要的正反序列选取第一个(或最后个)元素向向前(或后)依次与其他元素比较找到对应的位置并插入

https://www.runoob.com/python3/python-insertion-sort.html  <---这个大佬有比较清晰的图解    <(0.o)

#插入排序算法:从小到大排序
lista = [5,3,9,7,4]

for i in range(1,len(lista)):
    for j in range(i,0,-1):   
        if lista[j] < lista[j-1]:
            lista[j],lista[j-1] = lista[j-1],lista[j]
        else:
            break
        pass
    pass
print(lista)

 

 

 

 

                                                                                                                             入门中 理解不足 有大佬指点请联系邮箱!!

                                                                                                                                                                                                                                                                   end

你可能感兴趣的:(笔记)