等差数列末项计算

GitHub跳转原题关系图返回列表

前两项唯一确定公差 d=a2-a1,通项公式 a_n=a1+(n-1)·d 一行 O(1) 求末项。

OJ: roj

题目 ID: 1035

难度:入门

标签:入门数学python

创建: 2026-09-29 15:41

更新: 2026-10-04 23:06

题目描述

给出一个等差数列的前两项 a1a_1、a2a_2,求第 nn 项是多少。

输入一行,包含三个整数 a1,a2,na_1, a_2, n(−100⩽a1,a2⩽100-100 \leqslant a_1, a_2 \leqslant 100,0<n⩽10000 < n \leqslant 1000)。输出一个整数,即第 nn 项的值。

样例输入:

text
1 4 100

样例输出:

text
298

思路

前两项唯一确定公差 d=a2−a1d = a_2 - a_1,由等差数列通项公式直接得 an=a1+(n−1) da_n = a_1 + (n-1)\,d,一次减法、一次乘法、一次加法即可,O(1)O(1)。公差为负、为零以及 n=1n=1 都被同一公式自然覆盖,无需特判;真实数据可能超出题面声称的 ∣a1∣,∣a2∣⩽100|a_1|,|a_2| \leqslant 100,用 long long 兜底更稳。

参考代码

Python 版:

python
#!/usr/bin/env python3
# Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
# rbook: -> https://rbook.roj.ac.cn  https://rbook2.roj.ac.cn
# rainboy的学习导航网站: https://idx.roj.ac.cn
# create_at: 2026-09-29 16:01
# update_at: 2026-09-29 16:01

import sys


def nth_term(a1: int, a2: int, n: int) -> int:
    """等差数列第 n 项:公差 d = a2 - a1,第 n 项 = a1 + (n-1)·d。"""
    d = a2 - a1  # 公差:每一项相对前一项的固定增量
    return a1 + (n - 1) * d


def solve() -> None:
    a1, a2, n = map(int, sys.stdin.read().split())
    print(nth_term(a1, a2, n))


if __name__ == "__main__":
    solve()

C++ 版(同一算法):

cpp
/**
 * Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
 * rbook: -> https://rbook.roj.ac.cn  https://rbook2.roj.ac.cn
 * rainboy的学习导航网站: https://idx.roj.ac.cn
 * create_at: 2026-10-04 23:06
 * update_at: 2026-10-04 23:06
 */

#include <cstdio>

typedef long long ll;

ll a1, a2, n; // a1, a2 是等差数列前两项,n 是要求的项数

int main() {
    scanf("%lld %lld %lld", &a1, &a2, &n);
    ll d = a2 - a1;       // 公差:相邻两项的固定增量,可为负或零,无需特判
    ll an = a1 + (n - 1) * d; // 通项公式:第 n 项 = 首项 + (n-1) 个公差
    printf("%lld\n", an);
    return 0;
}