鱼C论坛

 找回密码
 立即注册
查看: 2470|回复: 7

求和算法怎么解

[复制链接]
发表于 2023-3-6 13:57:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
求1+(1+2)+(1+2+3)+...+(1+2+3+...+n)之和有3种解法。

解法1:依次求出(1+2+...+i)(1≤i≤n)之后累加;

解法2:利用i(i+1)/2(1≤i≤n)求和后再累加;

解法3:利用n(n+1)(n+2)/6公式求和。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-3-6 14:30:13 | 显示全部楼层
#假设N=100
#解法1:
s=0
for i in range(1,101):
    t=0
    for j in range(1,i+1):
        t+=j
    s+=t
print(s)        
#解法2:
s=0
for i in range(1,101):
    s+=i*(i+1)//2
print(s)   

#解法3:
print(100*(100+1)*(100+2)//6)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-6 14:30:30 | 显示全部楼层
D:\wpp>D:/Python37/python.exe d:/wpp/test8.py
171700
171700
171700
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-6 18:50:27 | 显示全部楼层
本帖最后由 傻眼貓咪 于 2023-3-6 19:01 编辑

四面体数

def func1(n):
    if not n:
        return 0
    SUM = 0
    for i in range(1, n + 1):
        SUM += i
    return SUM + func1(n - 1)

def func2(n):
    foo = lambda i: i * (i + 1) >> 1
    SUM = 0
    for i in range(1, n + 1):
        SUM += foo(i)
    return SUM

def func3(n):
    return n * (n + 1) * (n + 2) // 6

n = 100

print(func1(n))
print(func2(n))
print(func3(n))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-6 19:19:18 From FishC Mobile | 显示全部楼层
傻眼貓咪 发表于 2023-3-6 18:50
四面体数

太夸张了吧
我都怀疑楼主能否看得懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-6 19:46:20 | 显示全部楼层
wp231957 发表于 2023-3-6 19:19
太夸张了吧
我都怀疑楼主能否看得懂

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-9 16:31:26 | 显示全部楼层
法1:

首先求出第一个括号内的和为1,第二个括号内的和为(1+2),第三个括号内的和为(1+2+3),以此类推,第n个括号内的和为(1+2+3+...+n)。因此,可以从1到n循环,每次计算每个括号内的和,并将其累加得到最终结果。

n = 10
result = 0
for i in range(1, n + 1):
    inner_sum = sum(range(1, i + 1))
    result += inner_sum
print(result)


解法2:

根据等差数列求和公式,1+2+3+...+i=i(i+1)/2。因此,可以直接利用该公式计算每个括号内的和,然后将它们累加起来得到最终结果。
n = 10
result = 0
for i in range(1, n + 1):
    inner_sum = i*(i+1)//2
    result += inner_sum
print(result)

解法3:

通过观察,可以发现括号中的和是一系列连续的整数相加所得,而这些整数的个数也正好是括号的编号。因此,可以利用公式n(n+1)(n+2)/6直接计算所有括号内的和之和。
n = 10
result = n*(n+1)*(n+2)//6
print(result)

以上三种解法都可以得到结果
有用请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-9 17:42:17 | 显示全部楼层
解法1:

当i=1时,1的和为1;

当i=2时,(1+2)的和为3;

当i=3时,(1+2+3)的和为6;

...

当i=n时,(1+2+3+...+n)的和为1+2+3+...+n-1+n,也就是前n-1个自然数的和再加上n,即n(n+1)/2。

因此,要求1+(1+2)+(1+2+3)+...+(1+2+3+...+n)之和,可以按照上面的规律分别计算出每一项的和,然后累加起来,即:

1 + (1+2) + (1+2+3) + ... + (1+2+3+...+n)
= 1 + 3 + 6 + ... + n(n+1)/2
= (1+0) + (1+2) + (1+2+3) + ... + (1+2+3+...+n)
= (1+1+...+1) + (0+1+2+...+(n-1)) + (0+1+2+...+(n-2))+...+ (0+1+2) + 0
= n + (0+1+2+...+(n-1)) + (0+1+2+...+(n-2))+...+ (0+1+2)
= n + (n-1)n/2 + (n-2)(n-1)/2 + ... + 2.1/2 + 1.0/2
= n + n(n-1)/2 + (n-1)(n-2)/2 + ... + 2.1/2 + 1.0/2
= n + n(n-1)/2 + (n-1)(n-2)/2 + ... + 2.1/2 + n(n-1)(n-2)/6
= n(n+1)/2 + n(n-1)(n+1)/6
= n(n+1)(n+2)/6

因此,1+(1+2)+(1+2+3)+...+(1+2+3+...+n)之和等于n(n+1)(n+2)/6。

解法2:

我们可以将题目中的求和式改写为:

1 + (1+2) + (1+2+3) + ... + (1+2+3+...+n)
= (1+0) + (1+2) + (1+2+3) + ... + (1+2+3+...+n)
= 1*1 + 2*3/2 + 3*4/2 + ... + n*(n+1)/2

根据等差数列求和公式,可以将上面的式子改写为:

1 + (1+2) + (1+2+3) + ... + (1+2+3+...+n)
= 1*1 + 2*3/2 + 3*4/2 + ... + n*(n+1)/2
= (1+2+3+...+n)*(n+1)/2
= n(n+1)(n+2)/6

因此,1+(1+2)+(1+2+3)+...+(1+2+3+...+n)之和等于n*(n+1)*(n+2)/6。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-23 21:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表