文章

【GESP】C++一级练习 luogu-B3650, 求和

GESP一级知识点循环练习,题目本身逻辑不复杂。但需要注意数据类型以及换行输出超时问题,一次做对也不容易。

luogu-B3650

题目要求

题目描述

输入一个整数 $n(1\le n \le 10^7)$,每行输出一个数,表示数字 $1$ 到 $i$ 的和。

比如,当 $n=5$ 时,

第 1 行输出一个数字 1;

第 2 行输出数字 3,因为 1 + 2 = 3

第 3 行输出数字 6,因为 1 + 2 + 3 = 6

第 4 行输出数字 10,因为 1 + 2 + 3 + 4 = 10

第 5 行输出数字 15,因为 1 + 2 + 3 + 4 + 5 = 15

输入格式

输入一个数 $n(1\le n \le 10^7)$。

输出格式

输出共 $n(1\le n \le 10^7)$ 行,每行一个整数。

第 $i$ 行输出的数,表示数字 1 到 i 的和。

样例输入 #1

1
2

样例输出 #1

1
2
1
3

样例输入 #2

1
5

样例输出 #2

1
2
3
4
5
1
3
6
10
15

提示

对于 $40\%$ 的数据,$1\le n \le 10$。

对于 $60\%$ 的数据,$1\le n \le 10^4$。

对于 $80\%$ 的数据,$1\le n \le 10^6$。

对于 $100\%$ 的数据,$1\le n \le 10^7$。


题目分析

  • 这是一道简单的累加问题。我们需要遍历从1到n的整数序列,并累加每个数。
  • 使用一个循环来遍历从1到n的整数序列,并在每次循环中累加当前数到总和中。
  • 最后,输出每个数的累加和。

提示:

使用 ` cout « endl; ` 输出换行会导致 TLE(超过时间限制)。

请使用 cout << "\n"; 或者是 printf("\n"); 输出换行。

$1+2+3+\dots+10000000$ 的值超出了 int 类型可以存储的最大值。

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <cstdio>
#include <iostream>
using namespace std;
int main() {
    long long n; // 定义一个长整型变量n,用于存储输入的整数
    cin >> n; // 从输入流中读取n的值
    long long ans = 0; // 定义一个长整型变量ans,用于存储累加的和
    for (int i = 1; i <= n; i++) { // 循环从1到n
        ans += i; // 将当前数i加到ans上
        printf("%lld\n", ans); // 输出当前的累加和
    }
    return 0; // 返回0,表示程序执行成功
}

所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code

题目已加入洛谷Java、C++初学团队作业清单,可在线评测,团队名额有限,欢迎加入。

本文由作者按照 CC BY 4.0 进行授权