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; } } } } }
浙公网安备 33010602011771号