题解:洛谷 AT_abc435_a Triangular Number

【题目来源】

洛谷:AT_abc435_a [ABC435A] Triangular Number - 洛谷

【题目描述】

给定一个正整数 \(N\)
请输出从 \(1\)\(N\) 的所有整数之和,即 \(1+2+\cdots+N\)

【输入】

从标准输入中读取一行,格式如下:

\(N\)

【输出】

输出从 \(1\)\(N\) 的所有整数之和。

【输入样例】

5

【输出样例】

15

【核心思想】

  1. 问题分析:给定正整数 \(N\),需要计算 \(1 + 2 + \cdots + N\) 的值。这是一个等差数列求和/直接公式计算问题,关键在于使用高斯求和公式替代循环累加,实现 \(O(1)\) 计算。

  2. 算法选择

    • 数学公式:利用等差数列求和公式 \(S = \frac{N(N+1)}{2}\) 直接计算
  3. 关键步骤

    • 读取输入:读入正整数 \(N\)
    • 公式计算\(ans = \frac{N \times (N+1)}{2}\)
    • 输出结果:打印 \(ans\)
  4. 时间/空间复杂度

    • 时间复杂度:\(O(1)\),仅一次乘法和一次除法
    • 空间复杂度:\(O(1)\),仅需一个整型变量
  5. 数学公式的核心思想

    • 配对求和:将 \(1\)\(N\) 配对、\(2\)\(N-1\) 配对……每对和均为 \(N+1\),共 \(\frac{N}{2}\) 对,故总和为 \(\frac{N(N+1)}{2}\)
    • 避免溢出:使用 long long 或调整计算顺序(先除后乘)防止 \(N(N+1)\) 超出 int 范围
    • 适用于"连续整数求和"类基础数学问题,体现"用数学替代暴力"的优化思想

【算法标签】

入门 #数学

【代码详解】

#include <bits/stdc++.h>
using namespace std;

int n;  // 输入的正整数n

int main()
{
    // 输入正整数n
    cin >> n;

    // 计算1到n的和,并输出结果
    // 公式:S = n(n+1)/2
    cout << (n + 1) * n / 2 << endl;

    return 0;
}

【运行结果】

5
15
posted @ 2026-08-27 11:03  团爸讲算法  阅读(15)  评论(0)    收藏  举报