首页 > 试题广场 >

尼科彻斯定理

[编程题]尼科彻斯定理
  • 热度指数:136718 时间限制: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
n=int(input())
s=[]
n1=n*(n-1)+1
for i in range(n):
    s.append(n1+2*i)
print('+'.join(map(str,s)))
发表于 2025-05-01 20:15:13 回复(0)
while True:
    try:
        n = int(input())
        list1 = []
        res = []
        if n == 0:
            break
        elif n == 1:
            print(1)
        elif n > 1:
            if n % 2 != 0:
                for i in range(1, int(n / 2 + 1)):
                    list1.append(n ** 2 - i * 2)
                    list1.append(n ** 2 + i * 2)
                list1.append(n ** 2)
                res = map(str,sorted(list1))
                print("+".join(res))
            if n % 2 == 0:
                for i in range(1, n, 2):
                    list1.append(n ** 2 - i)
                    list1.append(n ** 2 + i)
                res = map(str,sorted(list1))
                print("+".join(res))
    except:
        break


发表于 2024-12-30 18:15:06 回复(0)
import sys

a= int(input())

# 找规律 第一个数字为 a*(a-1)+1
b=a*(a-1)+1
print(b,end='')

for i in range(a-1):
    b+=2
    print('+',end='')
    print(b,end='')
发表于 2024-10-11 14:28:20 回复(0)
# 规律总结:找到中间数m^3/m=m^2, 分为奇数和偶数情况讨论,
# 假设m=5:(m^2-4)+(m^2-2)+(m^2-0)+(m^2+2)+(m^2+4)=21+23+25+27+29=125
# 假设m=4:(m^2-3)+(m^2-1)+(m^2+1)+(m^2+3)=13+15+17+19
# 归纳总结公式为 m^2-(m-1)+2*i //这里的i=0,每迭代一次就i+1

m = int(input())
for i in range(m):
    print(str(int(m**2-m+1+2*i)),end="")
    if i < m-1:
        print("+",end="")
发表于 2024-09-29 21:57:20 回复(0)
def nicochis_theorem(m):
cube = m**3
start_odd = cube // m

if m%2 == 0:
start_odd -= m-1
result = []
for i in range(m):
result.append(start_odd + 2*i)
output = ""
for num in result[:-1]:
output += str(num) + " + "
output += str(result[-1])
return output

m = int(input())
print(nicochis_theorem(m)).     程序输出的格式不符合要求(比如空格和换行与要求不一致)
发表于 2024-09-01 10:50:29 回复(0)

while True:
    try:
        nums = int(input())
        cur = nums * nums
        res = [0] * nums
        if cur % 2 == 0:
            for i in range(nums):
                res[i] = cur + 2 * (i - nums // 2 + 1) - 1
        else:
            for i in range(nums):
                res[i] = cur + 2 * (i - nums // 2)
       
        output = ""
        for i in res:
            output = output + str(i) + '+'
       
        print(output[:-1])
        if sum(res) != nums * nums * nums:
            print("False")

    except:
        break

发表于 2024-08-28 16:58:37 回复(0)
m = int(input())

# m^3 = (a+b)*m/2
# b = a + (m-1)*2
# 由于上面的两行公式可知:a = m^2-m+1

a = m**2-m+1
print("+".join([str(a+i*2) for i in range(m)]))
直接利用等差数列求和公式
编辑于 2024-03-08 21:51:19 回复(0)
while True:
    try:
        m = int(input())
        l = [] # 空列表用于存储输出
        n_first = m**2 - m + 1 # 对应第一个奇数
        for i in range(m):
            l.append(n_first + i*2) # 注意向空列表中添加元素用append、extend函数        
        print(*l, sep='+') # 注意列表的解包输出*
    except:
        break

发表于 2022-09-14 19:01:13 回复(0)
while True:
    try:
        n = int(input())
        res = n*(n-1)+1
        lst = [n*(n-1)+1]
        for i in range(n-1):
            res += 2
            lst.append(res)
        new_lst = list(map(str,lst))
        print("+".join(new_lst))  
    except:
        break
发表于 2022-09-09 23:34:27 回复(0)
def fun(a): if a==0: return 0  else:
        x=a+fun(a-1) return x
n=int(input())
m=[] for i in range(n):
    j=(2*(fun(n)-n+1)-1)+2*i
    m.append(str(j)) print('+'.join(m))
发表于 2022-08-30 00:39:34 回复(0)
s=int(input())
lst=[]
for i in range(1,s+1):
    if i==0:
        lst.append(s*s-s+1)
    else:
        lst.append(s*s-s+1+(i-1)*2)
print('+'.join(map(str,lst)))
发表于 2022-08-28 10:50:02 回复(0)
num = int(input())
list1 = []
n = num*num
str1 = []   #join()只能连接字符串
if num % 2==0:
    #当输出为偶数时,易观察到连续奇数和是从num^2往两边奇数和(不包括num),步长为2
    #但为奇数时,需要加上自身平方
    for i in range(1,num,2):
        list1.append(n - i)
        list1.append(n + i)
else:
    for i in range(2,num,2):
        list1.append(n - i)
        list1.append(n + i)
    list1.append(n)
list1 = sorted(list1)
for i in range(len(list1)):
    str1.append(str(list1[i]))
print('+'.join(str1))

发表于 2022-08-17 23:04:06 回复(0)
m = int(input())
assert 1<=m<=100
l = []
for i in range(1,99**3,2): #i是奇数
    if i >= m*(m-1)+1: #找规律得出连续奇数的首位为m*(m-1)+1
        l.append(i)
    if len(l) == m: ##找规律得出连续奇数长度为m
        break
print('+'.join(map(str,l)))
发表于 2022-08-12 15:07:33 回复(0)
n = int(input())
m = 1 + n*(n-1)
ls = []
for i in range(n):
    ls.append(str(m))
    m += 2
print('+'.join(ls))

发表于 2022-08-09 00:33:56 回复(0)
m = int(input())
m3 = m**3
s=''
for i in range(m3):
    if (i+i+2*(m-1))/2*m==m3:
        for j in range(m):
            s = s+'+'+str(i+2*j)
print(s[1:])

发表于 2022-08-07 16:56:28 回复(0)
a=int(input())
b=a*a*a 
ii=1
total=0
while True:
    total=(ii+2*(a-1)+ii)*a/2
    if total ==b:
        break

    ii=ii+2
    
c=''
for i in range(0,a):
    c=c+str(ii)+'+'
    ii=ii+2

f = len(c)-1
c=c[0:f]
print(c)

发表于 2022-07-31 21:38:38 回复(0)
m = int(input())
l = []

if (m * m) % 2 == 0:
    n = m * m - m + 1
else:
    n = m * m - 2*(m//2)
for i in range(m):
    l.append(n)
    n += 2
print('+'.join([str(i) for i in l]))
发表于 2022-07-15 14:03:06 回复(0)
最笨方法,如下:
m = int(input())
l =[]
for i in range(m**3+1):
    if i %2 !=0:
        l.append(i)
t = 0
if m <=100:
    t =t+((1+m)*m)/2
s = int(t)
k = l[s-m:s]
print('+'.join(map(str,k)))
我没有一上来就开始找首个奇数的规律,而是采用穷极法进行尝试。。。 的确是个笨方法
给大家参考吧。也算是种思路
发表于 2022-07-03 10:57:38 回复(1)