首页 > 试题广场 >

尼科彻斯定理

[编程题]尼科彻斯定理
  • 热度指数:124827 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和。

例如:

1^3=1

2^3=3+5

3^3=7+9+11

4^3=13+15+17+19

输入一个正整数m(m≤100),将m的立方写成m个连续奇数之和的形式输出。
数据范围:
进阶:时间复杂度:,空间复杂度:



输入描述:

输入一个int整数



输出描述:

输出分解后的string

示例1

输入

6

输出

31+33+35+37+39+41
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)
def leijia(n):
    if n > 0 :
        return leijia(n-1) + n
    else:
        return 0

n = int(input())
temp = leijia(n-1) * 2
for i in range(1, n):
    print(temp + (i - 1) * 2 + 1 , end = '+')
print(temp + (n - 1) * 2 + 1)

发表于 2022-06-29 22:26:08 回复(1)

直接找规律,给定数字n,则这n个奇数为n(n-1)+1开头

import math
while True:
    try:
        n = int(input())
        lst = []
        for i in range(n):
            lst.append(str(n*(n-1)+i*2+1))
        print("+".join(lst))
    except:
        break
发表于 2022-06-14 22:42:52 回复(0)
n=int(input())
def solution(n):
    str1=''
    for i in range(1,n**3,2):
        str1=str1+str(i)+'+'
        s=i

        for j in range(i+2,n**3,2):
            s=s+j
            if s>n**3:
                break
            str1=str1+str(j)+'+'
            if s==n**3 and str1.count('+')==n:
                print(str1[:-1])
                return 1
        str1=""

solution(n)

发表于 2022-06-12 19:36:42 回复(0)

由m2 往左右分别散开m//2个数字

def main():
    while True:
        try:
            m=int(input().strip())
            task=[]
            if m&1==1:
                count=(m-1)//2
                m2=m**2
                for index in range(count):
                    index+=1
                    task.append(m2-index*2)
                task=sorted(task,reverse=False)
                task.append(m2)
                for index in range(count):
                    index+=1
                    task.append(m2+index*2)
            else:
                count=m//2
                m2=m**2
                for index in range(count):
                    task.append(m2-1-index*2)
                task=sorted(task,reverse=False)
                for index in range(count):
                    task.append(m2+1+index*2)
                pass
            print('+'.join(list(map(str,task))))
            break
        except EOFError as e:
            break

main()
发表于 2022-06-05 11:35:47 回复(0)
while True:
    try:
        n = int(input())
        cube = n**3
        ls = []
        if n%2==0:  #确定起始数字
            start = cube//n - 2*(n//2) +1
        else:
            start = cube//n - 2*(n//2) 
        for i in range(n):  #从起始数字开始,数n位。
            ls.append(str(start+i*2))
        print('+'.join(ls))
    except:
        break
发表于 2022-05-27 02:36:20 回复(0)

问题信息

难度:
71条回答 26589浏览

热门推荐

通过挑战的用户

查看代码