1 条题解

  • 0
    @ 2025-8-24 22:11:45

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar 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
    上传者