题意:给定n,确定x*x*x+y*(y+1)*(y+2)/6使得不超过n且最接近n
题解:n才十多万,直接打表。
View Code
1 #include<cstdio> 2 #include<algorithm> 3 #include<cstring> 4 using namespace std; 5 const int N=160000; 6 bool mark[160000]; 7 int main() 8 { 9 memset(mark,false,sizeof(mark)); 10 for(int x=0;;x++) 11 { 12 int t=x*x*x; 13 if(t>=N) 14 break; 15 mark[t]=true; 16 for(int y=0;;y++) 17 { 18 int s=t+y*(y+1)*(y+2)/6; 19 if(s>=N) 20 break; 21 mark[s]=true; 22 } 23 } 24 int n; 25 while(scanf("%d",&n),n) 26 { 27 while(!mark[n]) 28 n--; 29 printf("%d\n",n); 30 } 31 return 0; 32 }