首页 > 代码库 > 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 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。