枚举下就可以了,水
#include<stdio.h>
int main()
{
int c1[55], c2[97], i, j, n;
for (i = 0; i < 55; i++)
c1[i] = i * i * i;
for (i = 0; i < 97; i++)
c2[i] = i * (i + 1) * (i + 2) / 6;
while (scanf("%d", &n), n)
{
int max = -1;
for (i = 0; c1[i] <= n; i++)
for (j = 0; c1[i] + c2[j] <= n; j++)
if (c1[i] + c2[j] > max)
max = c1[i] + c2[j];
printf("%d\n", max);
}
return 0;
}