洛谷1984 [SDOI2008]烧水问题

一道找规律

原题链接

显然要将烧得的温度最大化利用,即每次都去热传递。
设水沸腾为(x)
第一杯直接烧水,需提高(x)
第二杯先与第一杯进行热传递,这样只需提高(dfrac{x}{2}),是上一杯的(dfrac{1}{2})倍。此时两杯温度为(dfrac{x}{2},x)
第三杯先与第一杯进行热传递,再与第二杯进行热传递,需提高(x-dfrac{dfrac{frac{x}{2}}{2}+x}{2}=dfrac{3x}{8}),是上一杯的(dfrac{3}{4})倍。此时三杯温度为(dfrac{x}{4},dfrac{5x}{8},x)
第四杯同理,需提高(x-dfrac{dfrac{dfrac{frac{x}{4}}{2}+dfrac{5x}{8}}{2}+x}{2}=dfrac{5x}{16}),是上一杯的(dfrac{5}{6})倍。
(cdots)
即第(n)杯是第(n-1)杯的(dfrac{2 imes(n-1)-1}{2 imes(n-1)})倍。
其实手算几杯找到规律就好

#include<cstdio>
using namespace std;
int main()
{
	int n, i;
	double s = 100, la = 100;
	scanf("%d", &n);
	for (i = 1; i < n; i++)
	{
		la *= 1.0*((i << 1) - 1) / (i << 1);
		s += la;
	}
	printf("%.2f", 4200 * s / n);
	return 0;
}
原文地址:https://www.cnblogs.com/Iowa-Battleship/p/9614685.html