歡迎您光臨本站 註冊首頁

翻轉數列python實現,求前n項和,並能輸出整個數列的案例

←手機掃碼閱讀     zhang3221994 @ 2020-05-04 , reply:0

這是刷題時遇到的一道題,題目描述:小Q定義了一種數列稱為翻轉數列:
給定整數n和m, 滿足n能被2m整除。對於一串連續遞增整數數列1, 2, 3, 4..., 每隔m個符號翻轉一次, 最初符號為'-';。
例如n = 8, m = 2, 數列就是: -1, -2, +3, +4, -5, -6, +7, +8.
而n = 4, m = 1, 數列就是: -1, +2, -3, + 4.
小Q現在希望你能幫他算算前n項和為多少。
如果只需求出N項和的話,這裡可以有一個簡便思路,觀察規律哈,比如n = 8, m = 2, 數列就是: -1, -2, +3, +4, -5, -6, +7, +8.時,
思路1:
對於一次翻轉前後的兩個子數組, -1, -2, 和+3, +4,+3和-1的和為2,+4和-2的和為2,總和為4,同理對後面的兩個子數組求和也是4,也就是說,前後兩個不同符號的子數組的和剛好是M*M,那麼這樣的數組有多少呢,有N/2M次,所以和為M*N/2
思路2:
對於相隔m個的兩個數字數字的正好為M,這樣的數字對有N/2個,所以和就為M*N/2啦~~~~是不是so easy呀
好了,python實現如下,這個是把數列輸出,然後再求和,另外思路2在裡面有體現哦
def isInput(m,n): c=n/m d=c%2 if d==0: return True else: return False def s(m,n): t=int(n/m) an=[] ai=0 for turntime in range(1,t+1):#turntime是翻轉次數 for sublen in range(0,m):#sublen是相同符號的子序列長度 ai=ai+1 tt=turntime%2 if tt==0: an.append(ai) else: ci=ai*(-1) an.append(ci) print(an) print(sum(an)) test=[] for a in an: if a<0: test.append(a) x=len(test) print(m*x)#這裡可以直接計算出結果 m=int(input("請輸入M:")) n=int(input('請輸入N:')) if isInput(m,n)==False: print('輸入不合法') else: s(m,n)
補充知識:Python Fibonacci-無窮數列 求第n項及前n項和
Fibonacci數列,又稱無窮列表,前n項和為:1,1,2,3,5,8,13,21,34,55…
他可以遞歸地定義為:
這是一個遞歸關係,當n大於1時,這個數列的第n項和是前兩項之和。利用遞歸算法可以很簡單地解出其解以及前n項和。
# 分段函數 F(n)= {1 n=0; 1 n=1; F(n-1)+F(-2) n>1} def backValue(n): if n<=1: return 1 return backValue(n-1)+backValue(n-2) n = int(input("輸入一個大於 0 的正整數:")) value = [i for i in range(n)] Fbc_list = [] for i in value: s = backValue(i) Fbc_list.append(s) print("第%s的數為:"%n,Fbc_list[-1],"
無窮列表為:",Fbc_list,"
前%s項和為:"%n,sum(Fbc_list))


[zhang3221994 ] 翻轉數列python實現,求前n項和,並能輸出整個數列的案例已經有256次圍觀

http://coctec.com/docs/python/shhow-post-232851.html