首页 > 试题广场 >

翻转数列

[编程题]翻转数列
  • 热度指数:20077 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
小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和m(2 <= n <= 109, 1 <= m), 并且满足n能被2m整除。


输出描述:
输出一个整数, 表示前n项和。
示例1

输入

8 2

输出

8
b=input()
b= b.split(' ')
m=int(b[0])
n=int(b[1])
print(int((m/2)*n))
又短又难

发表于 2022-03-05 14:52:03 回复(0)
n,m=map(int,input().split())
print(int((n*m)/2)) 

#n个数一共有n/(2m)组,而每一组求和结果为m*m。于是得到前n项和的公式:#Sn=n*m*m/(2m)=m*n/2
发表于 2021-04-03 17:38:59 回复(0)
等差数列-等差数列
n,m = map(int, input().split())
print(m*n//2) # 由 (1+n)*n//2-(1+n-m)*n//2 简化得出


发表于 2019-09-24 17:17:05 回复(0)
import sys
NM = sys.stdin.readline().split()
N = int(NM[0])
M = int(NM[1]) print(round(N*M/2))

发表于 2019-08-17 16:23:51 回复(0)
n,m=map(int,input().strip().split())
s=int(n/(2*m)*m**2)
print(s)

这道题主要考察数学知识,只要最后输出前n项和即可,不必具体求出数列
编辑于 2019-08-16 17:12:56 回复(0)
def fun(n, m):
    sum_n = 0
    k = 0
    for i in range(1,n+1):
        i = -i
        k += 1
        if k <= m :
            pass
        elif k < 2*m:
            i = -i
        elif k == 2*m:
            i = -i
            k = 0
        sum_n += i
    print(sum_n)
    return sum_n

n, m = map(int, input().split())
fun(n,m)
您的代码已保存 运行超时:您的程序未能在规定时间内运行结束,请检查是否循环有错或算法复杂度过大。 case通过率为30.00%

发表于 2018-09-16 13:27:39 回复(0)