题意:输入一个正整数n,求出不超过n的数m,m能满足存在2个数i,j,使i*i*i+j*(j+1)*(j+2)/6==m;
思路:如果暴力不是为了杀戮,那就毫无意义了
#include<iostream>
#include<cmath>
using namespace std;
int pow3(int x)
{
return x*x*x;
}
int f(int x)
{
return x*(x+1)*(x+2)/6;
}
int main()
{
int n;
while(cin>>n&&n)
{
int i,j;
int re=0;
for(i=0;i<=pow(n,0.34);i++)
{
for(j=0;j<=pow(n,0.5);j++)
{
if(pow3(i)+f(j)>n){break;}
re=max(re,pow3(i)+f(j));
}
}
cout<<re<<endl;
}
return 0;
}