UVa:107 - The Cat in the Hat

来源:互联网 发布:香港科技大学gpa 知乎 编辑:程序博客网 时间:2024/06/05 20:40

刚开始没读懂题目,英文一直是硬伤。

题目大意是:有一只(聪明的)猫要打扫房间,但不想自己一个人干,于是让它帽子里的猫出来帮忙(它会魔法?),它帽子里的猫的帽子里还有猫,它帽子里的猫的帽子里的猫的帽子里还有猫,等等。打扫房间的工作量不大,不需要那么的猫来帮忙,于是这只(聪明的)猫想到一个注意:“随着帽子的逐层变小,猫的身高也逐渐变小,会变到最小身高1,由身高为1的猫来打扫房间(嘻嘻……不用自己干咯)。“

在每层帽子里的猫的数量是个常数,N。每层帽子里的猫的身高是上一层的猫的身高的1/(N+1)倍。

猫的身高最小只能是1;

结果一定有猫要去打扫房间;

所有的猫的身高都为整数。

会给定最初那只猫(那只聪明的猫)的身高和要打扫房间的猫(身高为1的猫)的数量,请找出不用打扫房间的猫的数量及所有的猫的身高的总和。


解题思路:

首先如下写几组数据,推导出公式log(N+1)(firstHeight )  = log(N)(workers) = x,即 ln(firstHeight) * ln(N)  =  ln(workers) * ln(N + 1)

height:   h    h/(N+1)   h/(N+1)^2   h/(N+1)^3   h/(N+1)^4   ……   h/(N+1)^x = 1

amount:1          N             N^2              N^3              N^4        ……    N^x = workers

当workers = 1  即  N = 1 时,log(N)(workers) = 1或0,存在二义性, 因此此时:

notWorkers = log(2)(firstHeight) ,即等于指数x,因notworkers为整数,需利用ceil函数进行取整操作;

sumOfHeight = 2 * firstHeight - 1  ,由等比数列求和公式化计算化简得出。

当workers != 1 时:

notWorkers = (workers - 1) / (N - 1)  ,由等比数列求和公式化计算化简得出;
sumOfHeight = (N + 1) * firstHeight - workers * N  ,由等比数列求和公式化计算化简得出。


#include<stdio.h>#include<math.h>int main() {    int firstHeight, workers;    while (scanf("%d%d", &firstHeight, &workers) != EOF) {        if (!firstHeight && !workers)            break;        int notWorkers, sumOfHeight;        if (workers == 1) {            notWorkers = ceil(log(firstHeight) / log(2));            sumOfHeight = 2 * firstHeight - 1;        }        else {            int N;            for(N = 1; N < firstHeight; N++) {                if (fabs(log(firstHeight) * log(N) - log(workers) * log(N + 1)) < 1e-8)                    break;            }            notWorkers = (workers - 1) / (N - 1);            sumOfHeight = (N + 1) * firstHeight - workers * N;        }        printf("%d %d\n", notWorkers, sumOfHeight);    }    return 0;}

--------------------------------------------------------------------------------------------

          Keep It Simple,Stupid!

--------------------------------------------------------------------------------------------
0 0
原创粉丝点击