1 条题解
-
0
自动搬运
来自洛谷,原作者为

Tarsal
退役了。搬运于
2025-08-24 22:11:45,当前版本为作者最后更新于2019-09-04 08:29:09,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
我又双叒叕被包菜辣!
这道题是不久前的考试题,
现在来水一篇题解扯回正题
题目很明显的告诉你了,这是一个等差数列,
然后,还告诉你了首项, 第二项, 项数。
你还想咋滴告诉了你首项和第二项,相减不就是公差?
现在,你知道了你个等差数列的首项,公差和项数,要你求它各个项的和。
套公式就行了啊先摆出公式:
公式一: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
- 1
信息
- ID
- 4533
- 时间
- 1000ms
- 内存
- 250MiB
- 难度
- 1
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者