正题
第二题:烧水问题
相信你们的主要问题是没有理解好题目。
题目说的是“每一杯水被烧过一次即可"。所以说,一杯水烧完以后的最大价值,是给别人热量。
那么我们就想到了尽量给别人热量的方法。
一杯水:420000J
两杯水:210000J(将第一杯水烧开)+105000J(用第一杯水将第二杯水升高50度,然后再用105000J升到100度)
三杯水:140000J(将第一杯水烧开)+70000J(用第一杯水加热到50度再升高)+35000J(用第一杯水升高25度,用第二杯水再升高50度(到75度),再加热)。
。。。。同理
我们就发现了他的规律。假如一杯水所需热量为x J.那么n杯水共需x + x/2 + x/4 + x/8+ ... + x/2^(n-1)
用一个东西累加即可。
#include<iostream>
#include<cstdio>
using namespace std;
double t[50001];
int main()
{
int n;
double res,now;
cin>>n;
now=420000.00/n;
for(int i=1;i<=n;i++)
{
res+=now;
now*=(1-0.5/i);
}
printf("%.2lf\n", res);
return 0;
}