题目描述
小玉开心的在游泳,可是她很快难过的发现,自己的力气不够,游泳好累哦。已知小玉第一步能游2米,可是随着越来越累,力气越来越小,她接下来的每一步都只能游出上一步距离的98%。现在小玉想知道,如果要游到距离x米的地方,她需要游多少步呢。请你编程解决这个问题。
输入输出格式
输入格式:输入一个数字(不一定是整数,小于100m),表示要游的目标距离。
输出格式:输出一个整数,表示小玉一共需要游多少步。
输入输出样例
【题解】累加求和不解释!下面是数(da)学(lao)方法:
O(1)时间复杂度
等比数列求和公式:
每次游的距离为上一次的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; }
#include <iostream> #include <cstdio> using namespace std; const int MAX = 100000000;//设置的数要足够大 int main() { double n; cin >> n; int i, j; double sum = 0; double temp = 1; for(i = 0; i < MAX; i++){ for(j = 0; j < i; j++){ temp *= 0.98; } sum += 2 * temp; temp = 1;//重置temp if(sum >= n){ cout << i + 1 << endl; break; } } return 0; }