uva 107 - The Cat in the Hat

自己的写的太丑了,看了网上的才叫惊呆,太挫了

用log做太简单了。。。

 1 #include<stdio.h>
 2 #include<math.h>
 3 void main()
 4 {int hight,num,left,right,mid,x,y;
 5  while (scanf("%d%d",&hight,&num),hight+num)
 6  {
 7   left=1;  right=10000000;
 8   while (left)
 9   {mid=(left+right)/2;
10    if (fabs(log(mid)*log(hight)-log(mid+1)*log(num))<=0.00001) break;
11    if (log(mid)*log(hight)-log(mid+1)*log(num)>0) right=mid;
12                            else left=mid;
13   }
14   x=0; y=hight; left=1;
15   while (hight>1)
16   {hight/=(1+mid); left*=mid;
17    x+=left; y+=hight*left;
18   }
19   printf("%d %d\n",x-num+1,y);
20  }
21 }

已经想到k次了,还是没想到log,太局限在编程里了

#include<iostream>
using namespace std;
int main(){
    int n,m;
    while(cin>>n>>m){
        if(!n&&!m)
            break;
        int height=n,i,workers=m,num,num1,lazyworkers=1,sumHeight=0;
        if(m==0){
            cout<<"0 "<<n<<endl;
            continue;
        }
        if(n==1){
            cout<<"0 1"<<endl;
            continue;
        }
    
        for(i=2;i<=n;i++){
            num=0;
            num1=0;
            height=n;
            while(height%i==0){
                height/=i;
                num++;
            }
            if(height==1){

                if(i==2&&m==1){
                    int k=1;
                    for(int j=0;j<=num;j++){
                        sumHeight+=k;
                        k*=2;
                    }
                    cout<<num<<" "<<sumHeight<<endl;
                    break;
                }
                else if(i==2)
                    continue;
                while(workers%(i-1)==0){
                    workers/=(i-1);
                    num1++;
                }
                if(workers==1){
                    if(num1!=num1)
                        continue;
                    lazyworkers=-m;
                    int k=1;
                    for(int j=0;j<=num;j++){
                        lazyworkers+=k;
                        sumHeight+=n*k;
                        k*=(i-1);
                        n/=i;
                    }
                    cout<<lazyworkers<<" "<<sumHeight<<endl;
                    break;
                }
            }            
        }
    }
}

 

posted on 2014-01-07 17:15  云在心  阅读(182)  评论(0)    收藏  举报

导航