首页 > 代码库 > hdu 1399 Starship Hakodate-maru (暴力搜索)

hdu 1399 Starship Hakodate-maru (暴力搜索)

题目链接: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