UVA 107 - The Cat in the Hat

题目大意:有一只猫高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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值