標籤:style blog http color os io for art
題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=1399
題目大意:找到滿足i*i*i+j*(j+1)*(j+2)/6形式且小於等於n的最大值。
1 #include<iostream> 2 #include<cstdio> 3 4 using namespace std; 5 6 int main() 7 { 8 int n; 9 while(scanf("%d",&n),n)10 {11 int j,k,max=0;12 for(j=0; j*(j+1)*(j+1)/6<=n; j++)13 {14 for(k=0; k*k*k<=n; k++)15 {16 if(k*k*k+j*(j+1)*(j+2)/6>n)17 break;18 }19 if(max<(k-1)*(k-1)*(k-1)+j*(j+1)*(j+2)/6&&(k-1)*(k-1)*(k-1)+j*(j+1)*(j+2)/6<=n)20 max=(k-1)*(k-1)*(k-1)+j*(j+1)*(j+2)/6;21 }22 printf("%d\n",max);23 }24 }
還有第二種認為不錯的代碼。
1 #include <iostream> 2 #include <cstdio> 3 #include <cmath> 4 5 using namespace std; 6 7 int main() 8 { 9 int n,t,max,res;10 while(scanf("%d",&n)!=EOF)11 {12 if(n==0) break;13 max=0;14 for(int i=0; i*(i+1)*(i+2)/6<=n; i++)15 {16 res=0;17 t=n-i*(i+1)*(i+2)/6;18 for(int j=(int)pow(n,1.0/3); j>=0; j--)19 {20 if(j*j*j<=t)21 {22 res=j*j*j;23 break;24 }25 }26 if(res+i*(i+1)*(i+2)/6>max)27 max=res+i*(i+1)*(i+2)/6;28 }29 printf("%d\n",max);30 }31 return 0;32 }View Code