题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1399

题目大意:找到满足i*i*i+j*(j+1)*(j+2)/6形式且小于等于n的最大值。

 #include<iostream>
#include<cstdio> using namespace std; int main()
{
int n;
while(scanf("%d",&n),n)
{
int j,k,max=;
for(j=; j*(j+)*(j+)/<=n; j++)
{
for(k=; k*k*k<=n; k++)
{
if(k*k*k+j*(j+)*(j+)/>n)
break;
}
if(max<(k-)*(k-)*(k-)+j*(j+)*(j+)/&&(k-)*(k-)*(k-)+j*(j+)*(j+)/<=n)
max=(k-)*(k-)*(k-)+j*(j+)*(j+)/;
}
printf("%d\n",max);
}
}

还有第二种认为不错的代码。

 #include <iostream>
#include <cstdio>
#include <cmath> using namespace std; int main()
{
int n,t,max,res;
while(scanf("%d",&n)!=EOF)
{
if(n==) break;
max=;
for(int i=; i*(i+)*(i+)/<=n; i++)
{
res=;
t=n-i*(i+)*(i+)/;
for(int j=(int)pow(n,1.0/); j>=; j--)
{
if(j*j*j<=t)
{
res=j*j*j;
break;
}
}
if(res+i*(i+)*(i+)/>max)
max=res+i*(i+)*(i+)/;
}
printf("%d\n",max);
}
return ;
}
05-11 15:38
查看更多