题意:
一只身高为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;
}
\