Python实现翻转数列:求前n项和及完整数列输出

Miles
Miles
发布时间:2026-10-12 | 2人浏览过
原创

本文介绍了一种名为翻转数列的Python实现方法,针对给定整数n和m,生成每隔m个符号翻转的数列并计算前n项和。通过两种思路解析规律,提供完整代码示例,帮助读者理解数列生成与求和逻辑,适用于算法练习与编程学习。

在刷题过程中遇到一道关于数列的题目,题目定义了一种称为翻转数列的数列类型。

给定两个整数n和m,其中n必须能被2m整除。对于从1开始的连续递增整数序列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。

题目要求计算该数列前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(此处M=2,故为4),且共有N/2M组(此处8/4=2组),因此总和为M*N/2。

思路2如下:

观察相隔m个位置的数字对,其差值正好为M。这样的数字对共有N/2个,因此总和直接为M*N/2。

以下是Python实现代码,该代码不仅输出整个数列,还计算并输出前n项和,其中思路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项的值以及前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实现案例,包括求前n项和及输出完整数列的功能,即为分享的全部内容,希望能提供参考,并欢迎大家支持本站。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表