翻转数列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, 数列就是: -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],"\n无穷列表为:",Fbc_list,"\n前%s项和为:"%n,sum(Fbc_list))

以上这篇翻转数列python实现,求前n项和,并能输出整个数列的案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • python numpy生成等差数列、等比数列的实例

    如下所示: import numpy as np # 等差数列 print(np.linspace(0.1, 1, 10, endpoint=True)) print(np.arange(0.1, 1.1, 0.1)) """总结: arange 侧重点在于增量,不管产生多少个数 linspace 侧重于num, 即要产生多少个元素,不在乎增量 """ # 等比数列 np.logspace(1, 4, 4, endpoint=True, base

  • Python实现求数列和的方法示例

    本文实例讲述了Python实现求数列和的方法.分享给大家供大家参考,具体如下: 问题: 输入 输入数据有多组,每组占一行,由两个整数n(n<10000)和m(m<1000)组成,n和m的含义如前所述. 输出 对于每组输入数据,输出该数列的和,每个测试实例占一行,要求精度保留2位小数. 样例输入 81 4 2 2 样例输出 94.73 3.41 实现代码: import math while 1: x = raw_input() x = list(x.split(" "))

  • python等差数列求和公式前 100 项的和实例

    最近跑去学了下python,一个很简单的题,结果发现数学公示忘了,在不用for循环的情况下居然有些懵,记录为下.. 题:等差数列可以定义为每一项与它的前一项的差等于一个常数,可以用变量 x1 表示等差数列的第一项,用 d 表示公差,请计算数列 1 4 7 10 13 16 19 - 前 100 项的和. 等差求和公示: 和=(首数+尾数)*项数/2; 题的懵就是尾数忘了怎么求了,查了百度得到结果很简单. 尾数公式: 尾数 = 首数 + (项数-1)*等差数 Python代码: x1 = 1 d

  • 翻转数列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, 数列就是: -1, +2, -3, + 4. 小Q现在希望你能帮他算算前n项和为多少. 如果只需求出N项和的话,这里可以有一个简便思路,观察规律哈,比如n

  • Java求一个分数数列的前20项之和的实现代码

    题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和. 程序分析:请抓住分子与分母的变化规律. 程序设计: public class test20 { public static void main(String[] args) { float fm = 1f; float fz = 1f; float temp; float sum = 0f; for (int i=0;i<20;i++){ temp = fm; fm = fz; fz =

  • python求前n个阶乘的和实例

    我就废话不多说了,还是直接看代码吧! i = int(input("input")) sum = 0 if i<1: exit() else: while i>0: b = 2 c = 1 while b<=i: c=b*c b=b+1 sum += c i = i-1 # print(c) print(sum) 补充知识:python 利用递归方法求解n的阶乘和 写程序算出n的阶乘的和 def fn(x): if x==1: return 1 def f(x): i

  • python算法练习之兔子产子(斐波那切数列)

    目录 1.问题描述 2.问题分析 3.算法设计 4.完整程序 1.问题描述 有一对兔子,从出生后的第3个月起每个月都生一对兔子.小兔子长到第3个月后每个月又生一对兔子,假设所有的兔子都不死,问30个月内每个月的兔子总对数为多少? 2.问题分析 兔子产子问题是一个有趣的古典数学问题,我们画一张表来找下兔子数的规律,如下表所示 月数 小兔子对数 中兔子对数 老兔子对数 兔子总对数 1 1 0 0 1 2 0 1 0 1 3 1 0 1 2 4 1 1 1 3 5 2 1 2 5 6 3 2 3 8

  • Python编程求质数实例代码

    本文研究的主要是Python编程求质数实例,选取了几个数进行了测试,具体如下. 定义:质数又称素数.一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数:否则称为合数. 我们知道自然数(除了0和1以外)都可以写成几个质数相乘再乘以一的格式,所以我们可以用以个数去试一试看看它能否将小于它的质数整除. 首先我们创建一个空的list,然后我们知道2是最小的质数,于是我们把2添加进这个空白的list,之后我们开始循环,第一个数从3开始,用3除以小于3的质数,没有小于它的质数能被它整除,

  • Java打印斐波那契前N项的实现示例

    题外 由于idea原因 用注解test无法在控制台上输入所以写死到程序里了,版本都30.9102了为什么还是这样啊,intelJ你们该反思了!!! 用intelJ IDEA的小伙伴有遇到这种测试情况吗,如果项目上有测试用例需要自己单元测试,怎么解决控制台输入问题(@test情况下),直接改main方法的那个就算了.~~ 斐波那契的认识 斐波那契数列前2项为1,从第3项开始为该项的前2项和. eg:1,1,2,3,5,8- f(n)=f(n-1)+f(n-2) 代码参考 import org.ju

  • Python实现求最大公约数及判断素数的方法

    本文实例讲述了Python实现求最大公约数及判断素数的方法.分享给大家供大家参考.具体实现方法如下: #!/usr/bin/env python def showMaxFactor(num): count = num / 2 while count > 1: if num % count == 0: print 'largest factor of %d is %d' % (num, count) break #break跳出时会跳出下面的else语句 count -= 1 else: prin

  • Python实现求两个csv文件交集的方法

    本文实例讲述了Python实现求两个csv文件交集的方法.分享给大家供大家参考,具体如下: #!/usr/bin/env python rd3 = open('data_17_17_2.csv') base = open('data_17_17_3.csv') wr3 = open('delNoBuyed3DayAndStoreAndInCar4.5.2.csv','w+') bsData = base.readlines() i = 1 for key in rd3: if key in bs

随机推荐