Sicily 1017

来源:互联网 发布:linux 解压zip 编辑:程序博客网 时间:2024/05/24 05:10

本题题目很罗嗦,但是,其实是一道很简单的题目,主要就是求解一元方程的解就可以。(是叫一元方程吗?)

主要用到两个知识点:

1.求平方

#include<cmath>

double pow( double x, double y );

2.二分法

 二分法算法思想:首先确定有根区间,将区间二等分,通过判断f(x)的符号,逐步将有根区间缩小,直至有根区间足够小,便可求出满足精度要求的近似值。

流程图:
       

还有一点要注意的是,精确度要去到1e-6

#include <iostream>#include <cmath>#include <iomanip> using namespace std;int main(){    int n, i, count = 1;    int month[13];    double input[13];     while(cin >> n && n != -1){        for(i = 0; i <= n; i++){            cin >> month[i] >> input[i];        }        double result;        double x1 = 1, x2 = 2;        while(x2 - x1 >= 1e-6){            result = 0;            double median = (x1 + x2)/2;            for(i = 0; i < n; i++){                result += input[i]*pow(median, month[n]-month[i]+1);            }            if(result < input[n]){                x1 = median;            } else {                x2 = median;            }        }        if(count > 1){            cout << endl;        }        cout << "Case " << count++ <<": " << fixed << setprecision(5) << x1 - 1 << endl;    }    return 0;}





0 0