c语言1 n累加求和高斯法,N以内累加求和(高斯求和)

解法一:循环累加

将输入的数字N循环逐次减1,定义一个变量sum将每次减1的结果累加,输出sum就是所求结果#include 

using namespace std;

int main() {

int N,sum = 0;

cin >> N;

for (int i = 1; i <= N; ++i) {

sum += i;

}

cout <

return 0;

}

解法二:高斯的加法

假如给定的N=10,则这种算法是1+10、2+9、3+8、4+7、5+6,然后会发现,前面这几个加法算式的结果都是11,如下图所示

71afffb2a8650d78d95cf4d6651016fe.png

这个时候,只需要11*5,就可以得出结果。11*5不是固定值,是根据N得来的,所以我们得出sum = (1+N)*N/2。但是这里要注意,假如N是奇数,如果纯粹按照公式,我们会忽略掉最中间的值,所以要特殊处理一下,sum要加上(N/2)+1才是正确结果。#include 

using namespace std;

int main() {

int N,sum = 0,ans;

cin >> N;

ans = 1 + N;

sum = N / 2 * ans;

if (N % 2 != 0) sum += (N / 2 + 1);//判断N的奇偶性

cout <

return 0;

}

解法三:等差数列求和公式

还是高斯,他老人家总结出了一条等差数列求和公式:

2ae2e574763f42478f9181e50a236da1.png

公式描述:公式中首项为a1,末项为an,项数为n,公差为d,前n项和为Sn。

根据题意,再套用公式,在本题中我们可以得出首项为1,末项为N,公差为1,有了公式就很好写代码了,这就是数学的魅力#include 

using namespace std;

int main() {

int N;

cin >> N;

int sum = N * 1 + (N * (N - 1)) / 2 * 1;

cout <

return 0;

}

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值