首页 > 试题广场 >

尼科彻斯定理

[编程题]尼科彻斯定理
  • 热度指数:138347 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}尼科彻斯定理,又称为斐波那契数列定理,指的是对于任意正整数 n,存在一个由连续奇数组成的数列,使得该数列的和等于 n 的立方。
\hspace{15pt}例如:
\hspace{23pt}\bullet\,对于 n=1,数列 \left\{1\right\} 的和为 1^3=1
\hspace{23pt}\bullet\,对于 n=2,数列 \left\{3,5\right\} 的和为 2^3=3+5
\hspace{23pt}\bullet\,对于 n=3,数列 \left\{7,9,11\right\} 的和为 3^3=7+9+11
\hspace{23pt}\bullet\,对于 n=4,数列 \left\{13,15,17,19\right\} 的和为 4^3=13+15+17+19

\hspace{15pt}现在,给定一个正整数 n,请输出这个数列中的元素从小到大相加的形式。
\hspace{15pt}如果有多个这样的序列,请输出长度为 n 的那个。

输入描述:
\hspace{15pt}输入一个整数 n \left(1 \leqq n \leqq 100\right) 。


输出描述:
\hspace{15pt}在一行上输出一个字符串,用于描述这个数列中的元素从小到大相加的形式。元素与元素之间用加号连接。
示例1

输入

1

输出

1
示例2

输入

2

输出

3+5
示例3

输入

3

输出

7+9+11
示例4

输入

4

输出

13+15+17+19
nn = input().strip()
n = int(nn)
str1 = []
for i in range(1,n+1):
    #输入整数n,连续相加的第一个奇数是n * (n -1) + 2 * 1 - 1,将n个奇数取出存入列表
    x = n * (n -1) + 2 * i - 1
    str1.append(str(x))

str2 = "+".join(str1)
print(str2)
发表于 2025-06-21 17:40:01 回复(0)
n = int(input())
res = int(n * n - n + 1)
list_a = []
for i in range(n):
    list_a.append(res)
    res += 2
list_b = map(str, list_a)
result = "+".join(list_b)
print(result)

发表于 2025-06-08 19:14:34 回复(0)
n = int(input())
if n == 1:
    print(1)
else:
    x = n*(n-1)+1
    ods = [str(x+i*2) for i in range(n)]
    print('+'.join(ods))

发表于 2025-06-05 15:50:52 回复(0)
n = int(input())
first = n * (n - 1) + 1 # 根据规律推出首项通式
rs = [first]
for i in range(1, n):
    rs.append(first + 2 * i)

print(*map(str, rs), sep="+")

发表于 2025-06-03 15:47:48 回复(0)
n = int(input().strip())

# m = n*n - n + 1
m = n**2 - n + 1
for i in range(n):
    if i == n-1:
        print(m)
    else:
        print(m, end='+')
    m += 2



发表于 2025-02-24 04:13:09 回复(0)
n = int(input())
first = int(n*(n-1)+1)
lis = []
for i in range(n):
    lis.append(str(first))
    first += 2
print('+'.join(lis))
发表于 2025-01-22 15:31:11 回复(0)
#数学推导 观察等差数列的规律,首项 = n(n-1)+1+2d
n = int(input())
res =[]
for i in range(n):
    res.append(n*(n-1)+1+2*i)
print('+'.join(map(str,res)))
发表于 2024-12-29 22:21:44 回复(1)
第一个基数总是小于等于m**3 // 4的,所以可以缩小迭代范围
in_num = int(input().strip())
lower_num = in_num**3 // 4
for i in range(lower_num):
    if i % 2 == 1:
        factor = [i + 2 * n for n in range(in_num)]
        if sum(factor) == in_num ** 3:
            print('+'.join(map(str,factor)))

发表于 2024-12-10 15:28:14 回复(0)
#最直观的解法,每个开头的差值为2,4,6,8.....,每行的差值为2
n = int(input())
start_num = 1
for x in range(1, n+1):
    start_num += 2*(x-1)
for i in range(n):
    print(start_num, end="")
    if i < n-1:
        print("+", end="")
    start_num += 2
发表于 2024-11-10 09:46:14 回复(0)
我是这样想的,既然是加起来等于m的三次方,那可以用暴力办法来遍历从1到m**3的所有奇数,直到找到一个奇数is使得连续m几个奇数的和等于m**3:
我是这样想的,既然是加起来等于m的三次方,那可以用暴力办法来遍历从1到m**3的所有奇数,直到找到一个奇数is使得连续m几个奇数的和等于m**3:
n = int(input())
l = []
sum = n**3
for i in range(1,sum,2):
    if i//2 != 0 and n*i+n*(n-1) == sum:
        # l.append(i)
        for j in range(0,n):
            l.append(i+j*2)
print("+".join(map(str,l)))

发表于 2024-09-01 00:58:05 回复(0)
n = int(input())
q = n**3
result=[]
if n%2!=0:
    for i in range(-n,n):
        if i%2==1:
            result.append(int(q/n +i+1))
else:
    for i in range(-n,n):
        if i%2==1:
            result.append(int(q/n +i))  
print("+".join([str(i) for i in result]))
发表于 2024-07-30 10:52:27 回复(0)
#我是直接总结了数字规律,暴力输出的
m = int(input().strip())
for i in range(0, m-1):
    n = (m*m)-m+(2*i)+1
    print(n, end='+')
print(m**2+m-1)
发表于 2024-07-16 14:46:17 回复(0)
# 经观察 输出字符串的个数等于输入的整数m,
# 当m为奇数时,最中间位为m^2;当m为偶数时,最中间两位为m^2加减1
m=int(input())
l=[]   # 存输出字符串m^2左边的所有数字
r=[]   # 存输出字符串m^2右边的所有数字
for i in range(m//2+1):  # 把m对半遍历 左边的数字用- 右边的数字用+
    if m%2==0:
        r.append((m*m-1)+2*i)
        l.append((m*m+1)-2*i)
    else:
        r.append((m*m)+2*i)
        l.append((m*m)-2*i)
lst=sorted(list(set(l+r)))
print("+".join(str(i) for i in lst))
发表于 2024-05-31 18:06:31 回复(0)
i = int(input().strip())
val = []
start_x = i*(i-1)+1 for x in range(i):
    val.append(start_x)
    start_x = start_x + 2 result = '+'.join(map(str,val)) print(result)
发表于 2024-05-25 23:45:47 回复(0)
a=int(input())
b=list()
for i in range(a*a-a+1,a*a+a):
    if i % 2 != 0:
        b.append(i)
for i in range(len(b)):
    if i < len(b)-1:
        print(b[i],end='+')
    else:
        print(b[i])
发表于 2024-03-19 13:50:01 回复(0)
x=int(input())
a1=(2*(x**2)+(1-x)*2)/2
for i in range(x):
    if i <x-1:
        print(int(a1+2*i),end='+')
    else:
        print(int(a1+2*i))


审题得,如果输入的是x,那么就是有一个这样的等式
x^3==一个从a1开始,公差为2,长度为x的等差数列之和。
根据等差数列公式(这个记忆我自己有个模糊的记忆,现场推算的。。)
因此x^3=x(2*a1+(x-1))/2  
解出a1=(2*(x**2)+(1-x)*2)/2

然后将ai按照步长为2,进行打印即可
编辑于 2024-03-02 13:38:27 回复(0)

问题信息

难度:
63条回答 29275浏览

热门推荐

通过挑战的用户

查看代码
尼科彻斯定理