1. 程式人生 > >python 基礎演算法題集錦(1)

python 基礎演算法題集錦(1)

#(1)尋找序列中的最大值和最小值,不能用內建函式max和min
#(2)查詢序列值的出現次數
#(3)逆置序列
#(4)實現序列中元素之和
#(5)實現1+1/2+1/3+1/4+……1/n
#(6)實現1+1/2+2/3+3/4+4/5+……(n-1)/n

(1)#給定序列list =[1,2,5,4,0,3,9,8,5]查詢最大值和最小值

最大值:
max = list[0]
for target in list :
    if target> max
        max =  target
print(max)
最小值:
min = list[0]
for data in list :
    if data < min :
        min = data
print(min)

#通過索引查詢給定序列中的最大值和最小值

通過索引判斷最大值:
index= 0
for j in range(len(list)) :
    if list[j] > list[index] :
        index = j
print(list[index])
通過索引判斷最小值:
index = 0
for i in range(len(list)) :
    if list[i] < list[index] :
        index = i
print(list[index])

(2)尋找給定序列list =[0,1,2,3,5,0,2,8,9,1,0]目標值target = 1 的出現次數,要求用函式實現

list =[0,1,2,3,5,0,2,8,9,1,0]
def Times (list,target) :
   n = 0    
   '''
   定義一個初始化變數n來記錄目標值欻出現的次數
   '''
   for i in data :
        if i == target :
            n += 1
   return n
val = Times(data,1)
print(val)

(3)逆置序列list = [1,2,3,4,5,6,7,8,9]

def  Test_One(list) :
    start,end = 0,len(list)-1
    '''
    type start :定義為序列的起始下標
    type end  : 定義為序列的結束下標
    '''
  while start <end  :
        '''
        滿足以上條件時,序列對稱對的兩個元素交換位置
        下標向中間靠近
        '''
        list[start],list[end] = list[end],list[start]
        start,end =start+1,end-1
  return list
list = [1,2,3,4,5,6,7,8,9]
val = Test_One(list)
print(val)

(4)實現序列list =[1,2,3,4,5,8,6,9]中元素之和
#方法1:通過序列元素求和

def Test_Three_One(list) :
    sum = 0
    for i in list :
        sum = sum +i
    return sum
list=[1,2,5,8,6,9]
val = Test_Three_One(list)
print(val)

#方法2:通過索引求和(實現原理同方法1)

def Test_Three_Two(list) :
    sum = 0
    for i in range(0,len(list)) :
        sum +=list[i]
    return  sum
list=[1,2,5,8,6,9]
val = Test_Three_Two(list)
print(val)

#方法3:通過遞迴實現

def Test_Three_Three(list,start,end) :
    if start >= end :
        return 0
    elif start == end-1 :
        return list[start]
    else :
        mid = (start + end)//2
        return Test_Three_Three(list,start,mid)+Test_Three_Three(list,mid,end)
list=[1,2,5,8,6,9]
val = Test_Three_Three(list,0,len(list))
print(val)

(5)實現1+1/2+1/3+1/4+……1/n
#迴圈實現

def Test_Two_One(n) :
    sum = 0
    for i in range(1,n+1) :
        num = 1 / i
        sum += num
    return sum
val =Test_Two_One(2)
print(val)

#迭代實現

def Test_Two(n) :
    num = 1 / n
    if n == 1 :
        return 1
    elif n >= 2:
        return num + Test_Two(n-1)
val =Test_Two(2)
print(val)

(6)實現1+1/2+2/3+3/4+4/5+……(n-1)/n
#迭代實現

def Test_Three_One(n) :
    sum = 0
    for i in range(1,n+1) :
        if i == 1 :
            num = 1
        else :
            num = (i-1) / i
        sum += num
    return  sum
val = Test_Three_One(3)
print(val)

#遞迴實現

def Test_Three(n) :
    num =(n-1) / n
    if n == 1:
        return 1
    elif n >= 2 :
        return num + Test_Three(n-1)
val = Test_Three(3)
print(val)