洛谷P1163 二分

链接

  • 这道题不会的肯定是不知道他这2.9怎么算的,确实有点奇怪,一般来讲如果求出来年利率,那么月利率就是年利率/12,那么对于这道题应该就是年利息为200元,那么利率就是 200 1000 = 0.2 \dfrac{200}{1000} = 0.2 1000200=0.2但是 0.2 12 = 0.01667 \dfrac{0.2}{12} = 0.01667 120.2=0.01667显然和样例这个数没什么关系
  • 那么问题究竟出现在哪里?看一下题目,这里面有这样一句话:假设利率按月累计。那么也就是说他这利息是一个月一个月这样算的,也就是说,每个月交100块,这是本息和,第一个月有第一个月的利息,第二个月有第二个月的利息,每个月利息不同,如果设月利率为p,那么第一个月的本金应该是 100 1 + p \dfrac{100}{1+p} 1+p100第二个月的本金应该是
    100 ( 1 + p ) 2 \dfrac{100}{(1+p)^2} (1+p)2100以此类推,把这些本金加一起就是1000,接下来就是求解p的过程了
  • 或许是年龄问题,或许是小学初中dalao太多,感觉luogu上面题解有相当一部分不好好说话,或者故作高深,不太友好,所以给这题目写一篇讲解,不知是否表述清楚
  • 只要理解了这题怎么求的,相信二分决不是问题
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <vector>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
using namespace std;
typedef long long ll;
const int INF = 0x3f3f3f3f;
const int MAXN = 1e6 + 100;
const double eps = 1e-6;
int Data[MAXN];
int main(){
    
    
    double n, m;
    int p;
    cin>>n>>m>>p;
    double l, r, mid;
    l = 0;
    r = 1000;
    while(r - l > eps){
    
    
        mid = (r + l) / 2;
        double num = 0;
        for(int i=1;i<=p;i++){
    
    
            num += m / pow(1 + mid, i);
        }
        if(num > n){
    
    
            l = mid;
        }else r = mid;
    }
    printf("%.1lf", mid * 100);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/roadtohacker/article/details/113791461
今日推荐