uva 107 - The Cat in the Hat

21 篇文章 0 订阅
4 篇文章 0 订阅

题意:英语比较直接copy别人的

这道题也可以用枚举来做  想了一下比较难弄就推公式做了

题目意思就是小猫的帽子里面有n个小猫,高度为上一个小猫的1/(n+1),然后再依次n个...直到最后一个高度为1的为止。
题目给出第一个小猫的高度个最后高度为1的小猫个数,输出不工作的小猫的个数和小猫的总高度。
这个题就是数学公式:
设输入a和p,设每个小猫帽子里面有n个小猫,层数为k,则:
n^k=p
(n+1)^k=a

#include<cstdio>
#include<cmath>
#define eps 1e-8

int main()
{
    #ifdef LOCAL
    freopen("in.txt","r",stdin);
    #endif // LOCAL
    int H,work,N,i;
    while(scanf("%d%d",&H,&work)!=EOF)
    {
        if(H ==0&&work==0)break;
        double no_work = 1;
        for(i = 1; ; i++)//整形最大是2的32次方-1
        {
            if((int)(pow(1+pow(work*1.0,1.0/i),i)+0.1)>=H)
                break;
            /*就改了这点就TLE变AC了   没搞懂*/
            //double x = pow(work*1.0,1.0/i*1.0);
            //if(fabs(x-(int)(x+0.5))<eps) {N = (int)(x+0.5);break;}
        }
        N = (int)(pow(work*1.0,1.0/i)+0.1);
        long long sum = H;
        for(i = 1; H!=1; i++)
        {
            no_work += pow(N,i);
            H/=(N+1);
            sum += H*pow(N,i);
        }
        no_work -= work;
        printf("%.0lf %lld\n",no_work,sum);
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值