http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=331
解答如下(注意裁剪即可):
#include <iostream> #include <fstream> using namespace std; const int MAX = 200; //the max number the problem claim int cube[MAX]; int main(int argc, char *argv[]) { //ifstream cin("input.txt"); //calculate the cube in advance for (int i = 1; i <= MAX; ++i) { cube[i] = i*i*i; } //start at 6, before it there is no match for (int a = 3; a <= 200; ++a) { for (int b = 2; b < a; ++b) { if (cube[b] + cube[b+1] + cube[b+2] > cube[a]) break; for(int c = b + 1; c < a; ++c) { if(cube[b] + cube[c] + cube[c+1] > cube[a]) break; for (int d = c + 1; d < a; ++d) { if(cube[d] + cube[c] + cube[b] == cube[a]) cout<<"Cube = "<<a<<", "<<"Triple = ("<<b<<"," <<c<<","<<d<<")"<<endl; if (cube[d] + cube[c] + cube[b] > cube[a]) break; } } } } return 0; }