我又双叒叕被包菜辣!

题目

这道题是不久前的考试题,现在来水一篇题解

扯回正题

题目很明显的告诉你了,这是一个等差数列,

然后,还告诉你了首项, 第二项, 项数。 你还想咋滴

告诉了你首项和第二项,相减不就是公差?

现在,你知道了你个等差数列的首项,公差和项数,要你求它各个项的和。套公式就行了啊

先摆出公式:

公式一:Sn = (a1 + an) × n / 2;

公式二:Sn = n × a1 + n × (n - 1) × d / 2;

我们看看应该用哪个公式?

因为我们已知n, d, a1;

所以我们用第二个公式会更好一些。

那么下面证明一下

枚举整个数列:

a1, a2, a3, a4, … a(n - 1), an;

把他们全部用a1 和 d替换fn:

a1, (a1 + d), (a1 + 2d), … (a1 + d × (n - 2)), (a1 + d × (n - 1));

再倒过来gn?

(a1 + d × (n - 1)), (a1 + d × (n - 2)), … (a1 + 2d),(a1 + d), a1;

我们看看,f1 + g1 == f2 + g2 == f3 + g3;

那么,我们尝试把他们相加,即为2 * s:

a1 × n × 2 + (n - 1) × d × n;

然后除以2不就是s吗?

s = a1 × n + n × (n - 1) × d / 2;

发代码辣:

#include<bits/stdc++.h>//万能头万岁!
using namespace std;

#define int long long//不开long long见祖先
int head, nxt, n, d;
// head是首项, nxt 是第二项, n是项数

signed main()
{
scanf("%lld%lld%lld", &head, &nxt, &n);//输入
d = nxt - head;//求公差。
printf("%lld", n * head + n * (n - 1) * d / 2);//套公式
return 0;
}

Ps:请看懂再抄qwq