文章

【GESP】C++一级练习 luogu-B2070, 计算分数加减表达式的值

GESP一级知识点循环和条件判断应用,基础练习。

luogu-B2070

题目要求

描述

\[S_n = 1 - \frac{1}{2} + \frac{1}{3} - \frac{1}{4} + \frac{1}{5} - \frac{1}{6} +...+(-1)^{n-1} \times \frac{1}{n}。\]

输入一个整数 $n$,求 $S_n$。

输入

输入为一行,含一个正整数 $n$,其中 $1 \leq n \leq 1000$。

输出

输出为一行,为 $S_n$ 的值,结果保留小数点后 $4$ 位小数。

输入样例-1

2

输出样例-1

0.5000


题目分析

  • 读取整数 $n$ 的值
  • 初始化变量 $ans$,用于存储结果
  • 遍历从 $1$ 到 $n$ 的所有整数 $i$
  • 根据 $i$ 的奇偶性,决定是否将 $1/i$ 加到或减去 $ans$
  • 输出 $ans$ 的值,保留小数点后 $4$ 位

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <cstdio>
using namespace std;
int main() {
    int n; // 定义一个整数n,用于存储输入的整数
    scanf("%d", &n); // 从输入流中读取n的值
    double ans = 0; // 初始化变量ans,用于存储结果
    for (int i = 1; i <= n; i++) { // 遍历从1到n的所有整数i
        if (i % 2 != 0) { // 如果i是奇数
            ans += 1.0 / i; // 将1/i加到ans上
        }
        if (i % 2 == 0) { // 如果i是偶数
            ans -= 1.0 / i; // 将1/i减去ans
        }
    }
    printf("%.4f", ans); // 输出ans的值,保留小数点后4位
    return 0; // 返回0,表示程序执行成功
}

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

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

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