1. 程式人生 > 程式設計 >翻轉數列python實現,求前n項和,並能輸出整個數列的案例

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

這是刷題時遇到的一道題,題目描述:小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,+2,-3,+ 4.

小Q現在希望你能幫他算算前n項和為多少。

如果只需求出N項和的話,這裡可以有一個簡便思路,觀察規律哈,比如n = 8,+8.時,

思路1:

對於一次翻轉前後的兩個子陣列, -1,和+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實現,求前n項和,並能輸出整個數列的案例

補充知識:Python Fibonacci-無窮數列 求第n項及前n項和

Fibonacci數列,又稱無窮列表,前n項和為:1,1,5,8,13,21,34,55…

他可以遞迴地定義為:

翻轉數列python實現,並能輸出整個數列的案例

這是一個遞迴關係,當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],"\n無窮列表為:",Fbc_list,"\n前%s項和為:"%n,sum(Fbc_list))

以上這篇翻轉數列python實現,並能輸出整個數列的案例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。