zoukankan      html  css  js  c++  java
  • 洛谷P1035 级数求和 题解 简单模拟

    题目链接:https://www.luogu.com.cn/problem/P1035

    题目描述

    已知:(S_n= 1+1/2+1/3+…+1/n)。显然对于任意一个整数 (k),当 (n) 足够大的时候,(S_n>k)
    现给出一个整数 (k),要求计算出一个最小的 (n),使得 (S_n>k)

    输入格式

    一个正整数 (k)

    输出格式

    一个正整数 (n)

    样例输入1

    1
    

    样例输出1

    2
    

    说明/提示

    【数据范围】
    对于 (100\%) 的数据,(1le k le 15)

    题解

    我道题目其实是找最小的满足 (sum_{i=1}^n S_i > k)(n)

    我们可以开一个循环来模拟这个问题。

    我们只需要一开始开两个变量:

    • 变量 (S) 表示当前和 (S_n)(初始时 (S=0));
    • 变量 (n) 表示当前的坐标 (n)(初始时 (n=1))。

    然后 (n)(1) 开始遍历(即 (n = 1、2、3、 cdots) 这样遍历)。
    每一次循环内我们让 (S) 加上 (lfloor frac{1}{n} floor)
    直到第一次满足 (S > k) 时,我们输出此时的 (n) 并结束我们的程序即可。

    实现代码如下:

    #include <bits/stdc++.h>
    using namespace std;
    double k, S; // 因为我们在计算S和k的时候S有可能是小数,所以这里都用double来保存
    int n = 1; // n我还是用int,但是我在处理的时候会将其转换成double,
    // 这样操作看上去有些多此一举,但是也是出于我的习惯囧。其实n也可以定义成double类型
    int main() {
        cin >> k;
        while (true) {
            S += 1.0 / (double) n;  // 注意,表示常实数1最好加一个“,0”
            if (S > k) {
                cout << n << endl;
                break;
            }
            n ++;   // n要自增一,以进行下一步处理
        }
        return 0;
    }
    
  • 相关阅读:
    [atAGC052D]Equal LIS
    [atAGC052C]Nondivisible Prefix Sums
    [atAGC052B]Tree Edges XOR
    [gym103055H]Grammy and HearthStone
    Vector底层结构和源码剖析
    ArrayList的底层源码分析及注意事项
    Collection接口
    集合介绍
    用户管理底层实现
    什么是Mybatis
  • 原文地址:https://www.cnblogs.com/quanjun/p/11993588.html
Copyright © 2011-2022 走看看