洛谷-P1423 小玉在游泳

洛谷-P1423 小玉在游泳

原题链接:https://www.luogu.com.cn/problem/P1423


题目描述

小玉开心的在游泳,可是她很快难过的发现,自己的力气不够,游泳好累哦。已知小玉第一步能游2米,可是随着越来越累,力气越来越小,她接下来的每一步都只能游出上一步距离的98%。现在小玉想知道,如果要游到距离x米的地方,她需要游多少步呢。请你编程解决这个问题。

输入格式

输入一个数字(不一定是整数,小于100m),表示要游的目标距离。

输出格式

输出一个整数,表示小玉一共需要游多少步。

输入输出样例

输入 #1

4.3

输出 #1

3

C++代码

#include <iostream>
using namespace std;

int main() {
    int i;
    double x,m=2,sum=0;
    cin>>x;
    for(i=0;sum<x;++i)
    {
        sum+=m;
        m*=0.98;
    }
    cout<<i<<endl;
    return 0;
}

题解

数学方法

O(1)时间复杂度

等比数列求和公式

\(S_n=\frac{a_1(1-q^n)}{1-q}(q\neq1)\)

每次游的距离为上一次的0.98倍,构成一个公比为0.98的等比数列

现要使其前ans项大于等于一个值

只要代入公式并向上取整即可

下附超短代码

#include<bits/stdc++.h>
double x;
int main()
{
    std::cin>>x;
    std::cout<<ceil(log(1-x/100)/log(0.98));
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/yuzec/p/12515353.html