题目大意:有一只猫高H,它有帽子,帽子里有N只高H/(N+1)小猫,N只小猫也有帽子,帽子里也有N只高H/(N+1)^2小猫。当猫高1时,它没有帽子,它要工作打扫卫生。告诉你,第一支猫的高度,以及打扫卫生的有几只猫,求不工作的猫有几只,不工作的猫叠起来有多高。
解题思路:猫的高度:H H/(N+1) H/(N+1)^2 ... H/(N+1)^k = 1
猫有几只:1 N N^2 N^k
推出可以循环求N或k。后面的计算就简单了。求N的话,会用到log的换底公式,会因为N=1时超时。
ac代码:
#include <iostream>
#include <cmath>
using namespace std;
int H, worker, k;
double N, h, no_worker;
int main()
{
while (scanf("%d%d", &H, &worker)!=EOF){
if (!H && !worker)
break;
if (H == 1 && worker == 1)
printf("0 1\n");
else{
for (int i=1; ; i++)
if (H <= (int)(pow( (pow(worker, 1.0/i))+1, i )+0.1)){
k = i;
break;
}
N = pow(worker, 1.0/k);
h = H;
no_worker = 0;
for (int i=1; i<=k; i++){
h += pow(N, i) * H / pow((N+1), i);
no_worker += pow(N, i-1);
}
printf("%.0lf %.0lf\n", no_worker, h);
}
}
return 0;
}