P1423 小玉在游泳

题目描述

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

输入输出格式

输入格式:

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

输出格式:

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

输入输出样例

输入样例#1:  复制
4.3
输出样例#1:  复制
3



【题解】累加求和不解释!下面是数(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;
}

猜你喜欢

转载自blog.csdn.net/wyatt007/article/details/79885242