首页 > 试题广场 >

尼科彻斯定理

[编程题]尼科彻斯定理
  • 热度指数:131294 时间限制: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
#最直观的解法,每个开头的差值为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)
有点麻烦但是通俗易懂
sz = int(input())
str1 = ''
if sz%2==1:
    zj = sz**2
    for i in range(zj-2*(sz//2),zj+2*(sz//2)+1,2):

        str1 = str1+str(i)+'+'
    print(str1.strip('+'))
else:
    zj = sz**2
    for i in range(zj-2*sz//2+1,zj+2*sz//2,2):

        str1 = str1+str(i)+'+'
    print(str1.strip('+'))
发表于 2023-11-02 23:16:10 回复(0)
找出规律,第一个基数是num*(num-1)+1,也知道一共有num个奇数相加,求出每个奇数加入list中,最后用+连接输出
num = int(input())
res = []
start = num * (num-1)  + 1
res.append(str(start))
for i in range(1,num):
    tmp = start + 2 * i
    res.append(str(tmp))
print('+'.join(res))

发表于 2023-10-28 21:12:02 回复(0)
m = int(input())

start = -1
for i in range(1, m**3, 2):
    sum = m*(i+i+2*(m-1))//2
    if sum == m**3:
        start = i
        break
output = str(start)
for i in range(start+2,start+2*(m-1)+1,2):
    output += "+"
    output += str(i)
print(output)

发表于 2023-09-28 19:30:59 回复(0)
N  = int(input())
N_list = []
if 1<=N <=100:
    m = N**2
    n = m - N +1
    for i in range(N):
        N_list.append(n+2*i)
print('+'.join(map(str,N_list)))

发表于 2023-09-18 11:57:33 回复(0)
import sys

for line in sys.stdin:
    a = line.strip()
    b=int(a)
    mid=b**3//b
    #判断是奇数还是偶数
    if mid%2==0:
        mid=mid+1
    c=[]
    for i in range(1,b//2+1):
        j=k=0
        j=mid+2*i
        k=mid-2*i
        c.append(k)
        c.append(j)
    c.append(mid)
    c.sort()
    if sum(c)>b**3:
        c=c[:-1]
    ss=''
    for i in c:
        ss+=str(i)+'+'
    print(ss[:-1])

发表于 2023-08-31 22:26:45 回复(0)
先列个等式再化简
m=int(input())

a=m**2-m+1
b=''
for i in range(m-1):
    b=b+str(a+2*i)+'+'

print(b+str(a+2*(m-1)))


发表于 2023-07-20 12:28:17 回复(0)
import sys

# l = [i for i in range(n*(n-1),n*(n+1)) if i&1 ==1]
# print('+'.join(map(str,l)))

n = eval(input())

m = n**3

l=[]
for i in range(1,m,2):
    if n*i+n*(n-1) == m: # 等差公式求a1
        a1 = i
while m != 0:
    m-=a1
    l.append(a1)
    a1+=2

print('+'.join(map(str,l)))

发表于 2023-07-12 18:25:19 回复(0)
笨办法
import sys

a = int(input())
b = []
for i in range((a ** 3) // 2 + 3):
    if i % 2 == 1:
        b.append(i)
for x in range(0, len(b)):
    if sum(b[x : x + a]) == a ** 3 and len(b[x:x+a])==a:
        print("+".join(map(str, b[x : x + a])))


发表于 2023-06-17 14:51:20 回复(0)

def is_even(num):
    if num %2 != 0:
        return True
    else:
        return False

n = int(input())
num = n*n*n

jishujihe = []
for i in range(num+1):
    if is_even(i):
        jishujihe.append(i)
l = len(jishujihe)
count = 0
for i in range(l-1):
    j = i
    record = []
    while count < num:
        count += jishujihe[j]
        record.append(jishujihe[j])
        j += 1
    if count == num and len(record) == n:
        s = ""
        for i in range(len(record)-1):
            s = s + str(record[i]) + "+"
        s += str(record[-1])
        print(s)
    count = 0
发表于 2023-06-09 15:50:35 回复(0)
纯数学归纳方法:
拿n=4分解43,如下(i 取0,1,2,3):
i             (n-1)**2 + n + 2*  i
------------------------------------
0    13 = (4-1)**2 + 4 + 2* 0
1    15 = (4-1)**2 + 4 + 2* 1
2    17 = (4-1)**2 + 4 + 2* 2
3    19 = (4-1)**2 + 4 + 2* 3
归纳得出:在range(n)中,分解后n项奇数项规律为(n - 1) ** 2 + n + 2 * i
代码如下:
n = int(input())

l = []
for i in range(n):
    a = (n - 1) ** 2 + n + 2 * i
    l.append(a)

print("+".join(map(str, l)))
发表于 2023-06-04 23:21:17 回复(0)

问题信息

难度:
52条回答 27583浏览

热门推荐

通过挑战的用户

查看代码
尼科彻斯定理