解法一:循环累加
将输入的数字N循环逐次减1,定义一个变量sum将每次减1的结果累加,输出sum就是所求结果
#include <iostream> using namespace std; int main() { int N,sum = 0; cin >> N; for (int i = 1; i <= N; ++i) { sum += i; } cout << sum << endl; return 0; }
解法二:高斯的加法
假如给定的N=10,则这种算法是1+10、2+9、3+8、4+7、5+6,然后会发现,前面这几个加法算式的结果都是11,如下图所示
这个时候,只需要11*5,就可以得出结果。11*5不是固定值,是根据N得来的,所以我们得出sum = (1+N)*N/2。但是这里要注意,假如N是奇数,如果纯粹按照公式,我们会忽略掉最中间的值,所以要特殊处理一下,sum要加上(N/2)+1才是正确结果。
#include <iostream> 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 << sum << endl; return 0; }
解法三:等差数列求和公式
还是高斯,他老人家总结出了一条等差数列求和公式:
公式描述:公式中首项为a1,末项为an,项数为n,公差为d,前n项和为Sn。
根据题意,再套用公式,在本题中我们可以得出首项为1,末项为N,公差为1,有了公式就很好写代码了,这就是数学的魅力
#include <iostream> using namespace std; int main() { int N; cin >> N; int sum = N * 1 + (N * (N - 1)) / 2 * 1; cout << sum << endl; return 0; }
0.0分
11 人评分
#include<stdio.h> int main() { int sum,i,n; sum=0; scanf("%d",&n); for(i=1;i<=n;i++) { sum+=i; } printf("%d以内累加之和为%d",n,sum); }
2005年春浙江省计算机等级考试二级C 编程题(3),复杂度最低的方法没有之一!!!!!浏览:856 |
C语言训练-求矩阵的两对角线上的元素之和 (C语言代码)浏览:3472 |
P1002 (C语言代码)浏览:1019 |
2003年秋浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:561 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:698 |
1014题解浏览:524 |
简单的a+b (C语言代码)浏览:574 |
1052题解(链表操作)浏览:782 |
C语言训练-排序问题<1> (C语言代码)浏览:369 |
C二级辅导-温度转换 (C语言代码)浏览:575 |