uva 107 The Cat in the Hat(数学)

131 阅读1分钟

题意:

一只身高为h的猫可以变出n只高度为h/(n+1)的猫,变出来的小猫也可再变出n只猫,直到最后变出来的小猫高度为1,那么他们就不可以再变了,要去工作。给出高度为1的小猫数量w还有最开始的猫的高度h,求变出来的所有猫的高度之和,还有不工作的猫有多少只。

思路:

因为n^k=w,h/(n+1)^k=1,联立这两个式子就可以得出h,w,k的表达式,因为h和w是已知的,所以我们可以求出k的值,也就是知道了猫变化的次数。接下去在模拟他们变化过程就可以得出题目所求。

\

#include<iostream>
#include<cstdio> 
#include<cmath>
#define eps 1e-6
using namespace std;
int h,w,freesum,sumh,sumco,k,n;

void sl(){
	for(k=0;k<100;k++){
		double te=pow(pow(w,1.0/k)+1.0,1.0*k);
		if(fabs(te-h)<eps) {
	//	cout<<k<<endl;
		break;}
	}
	n=pow(w,1.0/k)+eps; 
}
void co(){
	sumh=h;
	freesum=1;
	int teh; 
	for(int i=1;i<=k;i++){
		teh=h/pow((n+1),1.0*i)+eps;
		sumh+=teh*pow(n,1.0*i)+eps;
		freesum+=pow(n,1.0*i)+eps; 
	}
	freesum-=w;
} 
int main(){
	while(scanf("%d%d",&h,&w)&&h&&w){
		sl();
		co();
		printf("%d %d\n",freesum,sumh);
	}
	return 0;
} 


\