大水。。直接搜。。
#include "stdio.h"
#include "string.h"
int n,a,b;
int judge1()
{
int i;
for (i=1;;i++)
if (i*i*i==n) return 1;
else
if (i*i*i>n)
{
a=i-1;
return 0;
}
}
int judge2()
{
int i;
for (i=1;;i++)
if ((i*(i+1)*(i+2)/6)==n) return 1;
else
if ((i*(i+1)*(i+2)/6)>n)
{
b=i-1;
return 0;
}
}
void judge()
{
int t,i,j,max;
max=0;
for (i=1;i<=a;i++)
{
for (j=1;j<=b;j++)
{
t=i*i*i+j*(j+1)*(j+2)/6;
if (t==n) { printf("%d\n",n); return ;}
if (t<n && t>max) max=t;
}
}
printf("%d\n",max);
return ;
}
int main()
{
while (scanf("%d",&n)!=EOF)
{
if (n==0) break;
if (judge1()==1 || judge2()==1)
{
printf("%d\n",n);
continue;
}
judge();
}
return 0;
}