C++洛谷题解(38)——P5722

题目信息

题名:数列求和

题目:计算 1+2+3+⋯+(n−1)+n 的值,其中正整数 n 不大于 100。由于你没有高斯聪明,所以你不被允许使用等差数列求和公式直接求出答案。

输入格式:输入一个正整数 n。

输出格式:输出一个正整数,表示最后求和的答案。

输入样例:100

输出样例:5050

说明提示:数据保证,1≤n≤100。

分析题目

这道题我最熟悉,“作案手法”我也最熟。这道题被C++计算机水平考试四级当作程序编写题的第二题,当时我就“作弊”用的等差数列公式。因为做过,个人感觉这道题so so so,easy。但如果正规的不用公式就不一样了,这里还是说用公式的方法。

先来说一下等差数列公式,相信只要年龄≤10就知道这个公式,即(首项+末项)x项数÷2。让百度说一段:

等差数列是指从第二项起,每一项与它的前一项的差等于同一个常数的一种数列,常用A、P表示。这个常数叫做等差数列的公差,公差常用字母d表示。例如:1,3,5,7,9……2n-1。通项公式为:an=a1+(n-1)*d。首项a1=1,公差d=2。前n项和公式为:Sn=a1*n+[n*(n-1)*d]/2或Sn=[n*(a1+an)]/2。注意:以上n均属于正整数。

直接上思路吧(还用说思路吗?):

  1. 声明n
  2. 输入n
  3. 直接套公式

示例代码

注释版:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n;                           //整数n,既是数列的末项,又是数列的项数
    cin >> n;                        //输入n的值
    cout << (1 + n) * n / 2 << endl; //不让用也用,反正又没有检测。这算不算卡Bug?
    system("pause");
    return 0; //直接结束
}

复制版:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin >> n;
    cout << (1 + n) * n / 2 << endl;
    system("pause");
    return 0;
}

以上除了题目外全部为废话

虽然光提交上面的代码也能通过,但如果在正规比赛可就不一定喽(话说正规比赛也不靠这个呀),所以我们还是要用其他方法做这道题的。

  1. 声明n和a并输入n
  2. 遍历1~n之间的所有数
  3.  a+=i,累加a
  4. 输出a

直接上代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
   int a=0,n;
   cin>>n;
   for(int i=1;i<=n;i++)
   {
    	a+=i;
   }
   cout<<a;
   return 0;
}
posted @ 2022-07-19 19:46  GitTJBKBeta  阅读(33)  评论(0编辑  收藏  举报