#include <iostream>
#include <cstring>
#include <cmath>
#include <iomanip>
using namespace std;
double saveAt[13];
int due;
double total;
double cal(double rate) {
double ttl = 0;
for(int i = 1; i <= 12; i++) {
if(saveAt != 0) {
ttl += saveAt[i] * pow(1 + rate, due - i + 1);
}
}
return ttl;
}
void print(double result) {
cout << fixed << showpoint << setprecision(5)
<< result << endl;
}
double binsearch(double head, double tail) {
if(fabs(cal(head) - total) < 1e-6) {
return head;
}
else if(fabs(cal(tail) - total) < 1e-6) {
return tail;
}
else{
double half = (head + tail) / 2;
if(cal(half) <= total) {
return binsearch(half, tail);
}
else {
return binsearch(head, half);
}
}
}
int main() {
int times, cases = 1;
while(cin >> times && times != -1) {
memset(saveAt, 0, sizeof(saveAt));
int mon;
double tosave;
for(int i = 0; i < times; i++) {
cin >> mon >> tosave;
saveAt[mon] = tosave;
}
cin >> due >> total;
if(cases != 1) {
cout << endl;
}
cout << "Case " << cases << ": ";
print(binsearch(0, 1));
cases++;
}
return 0;
}
1017. Rate of Return
最新推荐文章于 2024-09-18 11:07:17 发布