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!
--------------------------------------------------------------------------------------------- uva 107 The Cat in the Hat
- uva 107 the cat in the hat
- uva 107 - The Cat in the Hat
- UVa 107 - The Cat in the Hat
- UVA 107 - The Cat in the Hat
- UVa 107 - The Cat in the Hat
- UVA 107 The Cat in the Hat
- uva 107 - The Cat in the Hat
- uva 107 The Cat in the Hat
- UVA 107 The Cat in the Hat
- uva 107 - The Cat in the Hat
- UVa 107 - The Cat in the Hat
- UVa - 107 - The Cat in the Hat
- UVa 107 - The Cat in the Hat
- UVA 107 The Cat in the Hat
- Uva 107 The Cat in the Hat
- UVA - 107 The Cat in the Hat
- UVa 107 The Cat in the Hat
- 下一步学习的计划
- 例解GNU C之匿名联合或结构体
- C++调用CMD,等CMD运行完后继续运行C++
- C#设计模式之原型模式(Prototype Pattern)
- C#FlappyBird
- UVa:107 - The Cat in the Hat
- Java 10.18.1
- Python中GBK, UTF-8和Unicode的编码问题
- 封装
- 数据结构之静态查找表
- Redis源码分析(五)——简单动态字符串(sds)
- 两个链表相加
- java 10.18.2
- Android Widget支持的布局和控件以及所占单元格计算