洛谷 题解 P5534 【【XR-3】等差数列】
我又双叒叕被包菜辣!
这道题是不久前的考试题,现在来水一篇题解
扯回正题
题目很明显的告诉你了,这是一个等差数列,
然后,还告诉你了首项, 第二项, 项数。 你还想咋滴
告诉了你首项和第二项,相减不就是公差?
现在,你知道了你个等差数列的首项,公差和项数,要你求它各个项的和。套公式就行了啊
先摆出公式:
公式一: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